Socket網路編程複習與總結

來源:互聯網
上載者:User

TCP部分

標頭檔Winsock32.h
庫檔案ws2_32.lib
(註:以下在伺服器和用戶端都能發送和接收)

伺服器:

  WSAData wsaData;
  int     error;

  error = WSAStartup( MAKEWORD( 2, 2 ), &wsaData );
然後判斷error值!=,返回;
然後判斷是否被DLL支援

socket(,,)
第一個參數必須:AF_INET,表示地址協議族
第二個參數:a.SOCK_DGRAM,b.SOCK_STREAM. a是UDP類型,b是TCP類型
第三個參數:最好為0,他會根據地址類型和通訊端類別,自動為你選擇一個合適的協議
調用成功則返回一個SOCK類型的資料類型描述符,如果失敗,這個就會返回一個INVALID_SOCKET,錯誤資訊可以通過WSAGetLastError函數返回。

bind(,,)
第一個參數為要綁定的socket.
第二個參數指定該通訊端的本地地址資訊,是指向sockaddr結構的指標變數,對於不同協議不同(所以我們要用到第三個參數sizeof(sockddr)),在TCP/IP協議中,我們可以用socketaddr_in結構代替sockaddr。
struct socketaddr_in
{
short sin_family;//這個固定為AF_INET,
unsigned short sin_port;//連接埠號碼,注意,這裡必須用網路位元組序,調用函數htons函數
struct in_addr sin_addr;//IP地址,如果指定為INADDR_ANY,則允許通訊端向任何分配給原生IP地址發送或者接收資料,這對於有多個網卡的機器來說,就簡化了程式的編寫,如果只想讓一個IP地址接收資料,則必須指定具體某個IP,這可以用inet_addr()函數,注意,這裡也必須用網路位元組序,調用函數htonl函數
char sin_zero[8];//只是個填充,以保證socketaddr_in與sockaddr長度一樣
}
bind()函數調用成功返回0,失敗就會返回一個SOCKET_ERROR,同樣的錯誤資訊可以通過WSAGetLastError函數返回。

listen(,)
第一個參數為通訊端
第二個參數:等待串連最長請求隊列

在死迴圈裡調用accept(,,)  //等待用戶端串連
第一個參數為通訊端
第二個參數為用戶端的IP
第三個參數地址結構的長度,必須有一個初始值,可以用sizeof(SOCKADDR)
返回一個SOCKET

send(,,,)
第一個參數為通訊端(accept傳回值)
第二個參數包含被傳送的資料的buffer
第三個參數buffer資料的長度
第四個參數flag,影響send的行為,設為0

recv(,,,)
第一個參數為通訊端(accept傳回值)
第二個參數包含被接收的資料的buffer
第三個參數buffer資料的長度
第四個參數flag,影響recv的行為,設為0

最後closesocket().

用戶端:
WSAStartup方法調用,建立一個socket,這與伺服器一樣

connect(,,)
第一個參數為通訊端
第二個參數地址結構體資訊,與伺服器端bind函數類似
第三個參數地址結構長度

recv(,,,)
與伺服器端recv函數類似

send()
與伺服器端send函數類似

closesocket
 

 

UDP部分

標頭檔Winsock32.h
庫檔案ws2_32.lib

伺服器:
WSAStartup方法調用,建立一個socket,這與TCP伺服器類似(第二個參數改為SOCK_DGRAM)

bind()一樣

recvfrom(,,,,,)
第一個參數為socket
第二個參數buf數組
第三個參數buf的長度
第四個參數flag,設為0,
第五個參數目的地址結構的指標(out)
第六個參數整形的指標,返回地址結構的大小,(in,out)

closesocket()

WSACleanup()

用戶端:
WSAStartup方法調用,建立一個socket

sendto(,,,,)
第一個參數為socket
第二個參數buf數組
第三個參數buf的長度
第四個參數flag,設為0,
第五個參數目的地址結構的指標(out)
第六個參數地址結構體的長度,(in,out)

closesocket()

WSACleanup()

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.