C++ socket TCP開發基本流程總結
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開發基本流程總結
推薦閱讀: