sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW),基于TCP的socket编程是采用的流式套接字。
一 服务端实现
1:加载套接字库
WSADATA Ws;
WSAStartup(MAKEWORD(2,2), &Ws) 成功返回 0;
2:创建套接字;
SOCKET ServerSocket,
ServerSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
3:绑定套接字
sockaddr_in LocalAddr, ClientAddr;
LocalAddr.sin_family = AF_INET;
LocalAddr.sin_addr.s_addr = inet_addr(“192.168.1.1”);
LocalAddr.sin_port = htons(8080);
memset(LocalAddr.sin_zero, 0x00, 8);
bind(ServerSocket, (struct sockaddr*)&LocalAddr, sizeof(LocalAddr));
4:监听端口
listen(ServerSocket, int kacklog)
5:接收请求,返回套接字
SOCKET CientSocket
CientSocket = accept(ServerSocket, (struct sockaddr*)&ClientAddr, &AddrLen);
6:与客户端通信,接受/发送消息,及读写操作
char RecvBuffer[MAX];
recv(CientSocket, RecvBuffer, MAX, 0);
send(CientSocket, RecvBuffer, MAX+1, 0);
7:关闭套接字,释放套接字库
closesocket(ServerSocket);
closesocket(CientSocket);
WSACleanup();
二 客户端实现
1:加载套接字库
WSADATA Ws;
WSAStartup(MAKEWORD(2,2), &Ws) 成功返回 0;
2:创建套接字;
SOCKET CientSocket,
CientSocket= socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
3:连接套接字
LocalAddr.sin_family = AF_INET;
LocalAddr.sin_addr.s_addr = inet_addr(“192.168.1.1”);
LocalAddr.sin_port = htons(8080);
memset(ServerAddr.sin_zero, 0x00, 8);
connect(CientSocket,(struct sockaddr*)&ServerAddr, sizeof(ServerAddr));
4:接受/发送消息
char SendBuffer[MAX];
send(CientSocket, SendBuffer, (int)strlen(SendBuffer), 0);
5:关闭套接字,释放套接字库
closesocket(CientSocket);
WSACleanup();