服务器端套接字创建步骤:
1.调用socket函数创建套接字。
2.调用bind函数分配IP地址和端口号。
3.调用listen函数转为可接收请求状态。
4.调用该accept函数受理连接请求。
客户端套接字创建步骤:
1.调用socket函数创建套接字。
2.调用connect函数向服务器端发送连接请求。
服务端:
#include <stdio.h> #include <stdlib.h> #include <WinSock2.h> void ErrorHandling(char* message); int main() { WSADATA wsaData; SOCKET hServerSock, hClientSock; SOCKADDR_IN serverAddr, clientAddr; int szClientAddr; char message[] = "hello world!"; int listenPort = 8000; if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) ErrorHandling("WSAStartup() error."); hServerSock = socket(PF_INET, SOCK_STREAM, 0); if (hServerSock == INVALID_SOCKET) ErrorHandling("socket() error."); memset(&serverAddr, 0, sizeof(serverAddr)); serverAddr.sin_family = AF_INET; serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); serverAddr.sin_port = htons(listenPort); if (bind(hServerSock, (SOCKADDR*)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR) ErrorHandling("bind() error."); if (listen(hServerSock, 5) == SOCKET_ERROR) ErrorHandling("listen() error."); szClientAddr = sizeof(clientAddr); hClientSock = accept(hServerSock, (SOCKADDR*)&clientAddr, &szClientAddr); if (hClientSock == INVALID_SOCKET) ErrorHandling("accept() error."); send(hClientSock, message, sizeof(message), 0); closesocket(hClientSock); closesocket(hServerSock); WSACleanup(); return 0; } void ErrorHandling(char* message) { fputs(message, stderr); fputc('\n', stderr); exit(1); }
客户端:
#include <stdio.h> #include <stdlib.h> #include <WinSock2.h> void ErrorHandling(char* message); int main() { WSADATA wsaData; SOCKET hSocket; SOCKADDR_IN serverAddr; char message[30]; int strLen; if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) ErrorHandling("WSAStartup() error."); hSocket = socket(PF_INET, SOCK_STREAM, 0); if (hSocket == INVALID_SOCKET) ErrorHandling("socket() error."); memset(&serverAddr, 0, sizeof(serverAddr)); serverAddr.sin_family = AF_INET; serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); serverAddr.sin_port = htons(8000); if (connect(hSocket, (SOCKADDR*)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR) ErrorHandling("connect() error."); strLen = recv(hSocket, message, sizeof(message) - 1, 0); if (strLen == -1) ErrorHandling("read() error."); printf("Message recv: %s\n", message); closesocket(hSocket); WSACleanup(); return 0; } void ErrorHandling(char* message) { fputs(message, stderr); fputc('\n', stderr); exit(1); }