Sockets編程有三種:

(1).流步套接字(SOCK_STREAM);

(2).數據報套接字(SOCK_DGRAM);

(3).原始套接字(SOCK_RAW);

而基於TCP的socket編程是採用的流步套接字,具體編程步驟如下:

伺服器端編程的步驟:

1:載入套接字型檔,創建套接字(WSAStartup()/socket());2:綁定套接字到一個IP地址和一個埠上(bind());3:將套接字設置為監聽模步等待連接請求(listen());4:請求到來後,接受連接請求,返回一個新的對應於此次連接的套接字(accept());5:用返回的套接字和客戶端進行通信(send()/recv());6:返回,等待另一連接請求;7:關閉套接字,關閉載入的套接字型檔(closesocket()/WSACleanup())。

客戶端編程的步驟

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

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

3:和伺服器端進行通信(send()/recv());4:關閉套接字,關閉載入的套接字型檔(closesocket()/WSACleanup())。

第一步: 載入/釋放Winsock庫:

1.載入方法:

WSADATA wsa;

/*初始化socket資源*/if(WSAStartup(MAKEWORD(1,1),&wsa) != 0){ return; //代表失敗

}

2.釋放方法:

WSACleanup();

第二步: 構造SOCKET:

1.服務端:構造監聽SOCKET,流步SOCKET.

SOCKET Listen_Sock =socket(AF_INET, SOCK_STREAM, 0)

2.客戶端:構造通訊SOCKET,流步SOCKET.

SOCKET Client_Sock = socket(AF_INET, SOCK_STREAM, 0)

第三步: 配置監聽地址和埠:

1.服務端: SOCKADDR_IN serverAddr

ZeroMemory((char *)&serverAddr,sizeof(serverAddr));

serverAddr.sin_family = AF_INET;serverAddr.sin_port = htons(1234); /*本地監聽埠:1234*/serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);/*有IP*/

第四步: 綁定SOCKET:

1.服務端:綁定監聽SOCKET.

bind(Listen_Sock,(struct sockaddr *)&serverAddr,sizeof(serverAddr))

第五步: 服務端/客戶端連接:

1.服務端:等待客戶端接入.

SOCKET Command_Sock = accept(Listen_Sock,...)

2.客戶端:請求與服務端連接.

int ret = connect(Client_Sock, ...)

第六步: 收/發數據:

1.服務端:等待客戶端接入.charbuf[1024].

接收數據:recv(Command_Sock,buf,...)或 發送數據:send(Command_Sock,buf,...)

2.客戶端:請求與服務端連接.charbuf[1024].

發送數據:send(Client_Sock,buf,...)或

接收數據:recv(Client_Sock,buf,...)

第七步: 關閉SOCKET:

1.服務端:關閉SOCKET.

closesocket(Listen_Sock) closesocket(Command_Sock)

2.客戶端:關閉SOCKET.

closesocket(Client_Sock)

服務端:

客戶端:

來自fanyun_01

本文由 fanyun_01 發佈於C++ socket TCP開發基本流程總結

推薦閱讀:

相关文章