| 函數 | 用途 |
|---|---|
| WSAStartup | 加載 Winsock 庫,協商版本 |
| socket | 創建套接字,指定 AF_INET, SOCK_STREAM/DGRAM |
| bind | 綁定本地 IP 和端口 |
| listen | 將套接字設為監聽狀態 (TCP 服務器) |
| accept | 接受客戶端連接,返回新套接字 (TCP 服務器) |
| connect | 向服務器發起連接 (TCP 客戶端) |
| send/recv | 發送/接收數據 (TCP) |
| sendto/recvfrom | 發送/接收數據報 (UDP) |
| closesocket | 關閉套接字 |
| WSACleanup | 釋放 Winsock 庫 |
| htons/htonl | 主機字節序轉網絡字節序 (大端) |
| inet_addr/inet_ntoa | IP 字符串與無符號長整數轉換 |
// 初始化
WSAStartup(MAKEWORD(2,2), &wsaData);
// 創建套接字
SOCKET sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
// 綁定
sockaddr_in sin; sin.sin_family=AF_INET; sin.sin_port=htons(6000); sin.sin_addr.S_un.S_addr=INADDR_ANY;
bind(sListen, (sockaddr*)&sin, sizeof(sin));
// 監聽
listen(sListen, 5);
// 循環接受
while (true) {
sockaddr_in clientAddr; int addrLen = sizeof(clientAddr);
SOCKET sClient = accept(sListen, (sockaddr*)&clientAddr, &addrLen);
// 通信 send/recv
closesocket(sClient);
}
closesocket(sListen);
WSACleanup();
WSAStartup(...);
SOCKET sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
sockaddr_in srv; srv.sin_family=AF_INET; srv.sin_port=htons(6000); srv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
connect(sClient, (sockaddr*)&srv, sizeof(srv));
// 通信 send/recv
closesocket(sClient);
WSACleanup();
UDP 無連接,服務器 bind 後直接 recvfrom,客戶端 sendto 指定目標地址。無需 listen/accept/connect。
網絡傳輸使用大端序,x86 主機為小端。端口、IP 地址整數形式必須用 htons/htonl 轉換,接收端用 ntohs/ntohl 轉回。