我們先從伺服器端來看這個模型,在 Windows 系統上正常的一個伺服器端 socket 通信流程是先初始化套接字型檔,然後創建偵聽 socket,接著綁定 ip 地址和埠,再調用 listen 函數開啟偵聽。代碼如下:
//2. 創建用於監聽的套接字
SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, 0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(6000);
//3. 綁定套接字
if (bind(sockSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)) == SOCKET_ERROR)
{
closesocket(sockSrv);
WSACleanup();
return -1;
}
//4. 將套接字設為監聽模式,準備接受客戶請求
if (listen(sockSrv, SOMAXCONN) == SOCKET_ERROR)
{
closesocket(sockSrv);
WSACleanup();
return -1;
}