centos Android 编程 java 程序员 php nginx 云计算 shell Ubuntu wordpress mysql Firefox Python Windows apache google 微软 linux 开源

面向连接的socket通信实现

 TCP:Transmission Control Protocol 傳輸控制協議。TCP是一種面向連接(連接導向)的、可靠的、基於字節流的運輸層(Transport layer)通信協議。 

 基於TCP(面向連接)的socket編程,分為客戶端和服務器端。

 客戶端的流程如下:

(1)創建套接字(socket)

(2)向服務器發出連接請求(connect)

(3)和服務器端進行通信(send/recv)

(4)關閉套接字

  服務器端的流程如下:

(1)創建套接字(socket)

(2)將套接字綁定到一個本地地址和端口上(bind

(3)將套接字設為監聽模式,準備接收客戶端請求(listen)

(4)等待客戶請求到來;當請求到來後,接受連接請求,返回一個新的對應於此次連接的套接字(accept

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

(6)返回,等待另一個客戶請求。

(7)關閉套接字。

  對普通用戶而言,ip地址使用點分法表示("192,168.0.1"字符串),但在計算機中不會使用這種方式,因為這樣會浪費存儲空間。實際上,計算機使用長整型存儲IP地址,分為網絡字節序和主機字節序。
(1)網絡字節序
  在網絡傳輸過程中,IP地址保存為32位二進制,TCP/IP規定,在低位存儲地址中保存數據的高位字節,這種存儲順序稱為網絡字節順序,所以數據的傳輸由高位至低位進行的。不同網絡設備和操作系統在發送數據之前都需要將二進制數據轉為網絡字節序。

  WSAStartup把第一個字段wVersion設成打算使用的WinSock版本,wHighVersion參數容納是現有的WinSock庫的最高版本。這兩個字段中,高位字節代表的是WinSock副版本,而低位字節代表的是WinSock主版本。
如果WinSock.dll或底層網絡子系統沒有被正確初始化或沒有被找到,WSAStartup將返回WSASYSNOTREADY。此外這個函數允許你的應用程序協商使用某種版本的WinSock規範。如果請求的版本等於或高於DLL所支持的最低版本,WSAStartup成員中的wVersion將包含你的應用程序應該使用的版本,它是DLL支持最高版本和請求版本中較小的那一個。反之,若請求的版本低於DLL所支持的最低版本,WSAStartup將返回WSAVERNOTSUPPORTED。
 第一個參數為套接字;第二個參數為buf,包含了將要被發送的數據;第三個參數為buf中數據的長度;第四個參數的設置將影響sendto函數的調用行為,一般設置為0;第五個參數為地址結構體的指針,主要用來設定目的套接字的地址信息;第六個參數為地址結構體的長度。

延伸阅读

评论