C Socket程式設計例項解析

2021-08-03 00:00:13 字數 1691 閱讀 2837

socket本質是程式設計介面(api),對tcp/ip的封裝,tcp/ip也要提供可供程式設計師做網路開發所用的介面,這就是socket程式設計介面;http是轎車,提供了封裝或者顯示資料的具體形式;socket是發動機,提供了網路通訊的能力。

在internet上的主機一般執行了多個服務軟體,同時提供幾種服務。每種服務都開啟乙個socket,並繫結到乙個埠上,不同的埠對應於不同的服務。socket正如其英文原意那樣,像乙個多孔插座。一台主機猶如布滿各種插座的房間,每個插座有乙個編號,有的插座提供220伏交流電, 有的提供110伏交流電,有的則提供有線電視節目。 客戶軟體將插頭插到不同編號的插座,就可以得到不同的服務。—— [ 維基百科]

有三種不同形式的套接字:

資料報套接字(sock_dgram)

原始套接字(sock_raw)

原始套接字(socket_raw)允許對較低層次的協議直接訪問,比如ip、 icmp協議,它常用於檢驗新的協議實現,或者訪問現有服務中配置的新裝置,因為raw socket可以自如地控制windows下的多種協議,能夠對網路底層的傳輸機制進行控制,所以可以應用原始套接字來操縱網路層和傳輸層應用。比如,我們可以通過raw socket來接收發向本機的icmp、igmp協議包,或者接收tcp/ip棧不能夠處理的ip包,也可以用來傳送一些自定包頭或自定協議的ip包。網路監聽技術很大程度上依賴於socket_raw

基於tcp的socket使用流式套接字,相比於使用資料報套接字的udp來講,tcp可以使程式設計師不必關心資料正確性及順序正確性,缺點是效率較低。

基於tcp的socket程式設計最常見的應用場景是在c/s架構下的分布式應用,針對客戶端和伺服器端提供不同的socket系統呼叫。

下面舉例說明其使用方式:

#include 

#include

#pragma comment(lib,"ws2_32.lib")

void main()

#include 

#include

#pragma comment(lib,"ws2_32.lib")

void main()

附socket程式設計步驟:

伺服器端程式設計的步驟:

1:載入套接字型檔,建立套接字(wsastartup()/socket());

3:將套接字設定為監聽模式等待連線請求(listen());

4:請求到來後,接受連線請求,返回乙個新的對應於此次連線的套接字(accept());

5:用返回的套接字和客戶端進行通訊(send()/recv());

6:返回,等待另一連線請求;

7:關閉套接字,關閉載入的套接字型檔(closesocket()/wsacleanup())。

客戶端程式設計的步驟:

1:載入套接字型檔,建立套接字(wsastartup()/socket());

2:向伺服器發出連線請求(connect());

3:和伺服器端進行通訊(send()/recv());

4:關閉套接字,關閉載入的套接字型檔(closesocket()/wsacleanup())。

csdn部落格

C Socket程式設計例項解析

socket本質是程式設計介面 api 對tcp ip的封裝,tcp ip也要提供可供程式設計師做網路開發所用的介面,這就是socket程式設計介面 http是轎車,提供了封裝或者顯示資料的具體形式 socket是發動機,提供了網路通訊的能力。在internet上的主機一般執行了多個服務軟體,同時提...

C socket程式設計例項

include stdafx.h include pragma comment lib,ws2 32.lib define port number 11234 define max buf size 1024 int tmain int argc,tchar argv socket nsocket ...

C Socket 程式設計簡單例項

c console 程式設計 伺服器端 csharpconsolesokecttestserver.cs using system using system.collections.generic using system.text using system.net using system.net...