代码拉取完成,页面将自动刷新
#define WIN32_LEAN_AND_MEAN
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <windows.h>
#include <WinSock2.h>
#include
#pragma comment(lib , "ws2_32.lib")
int main()
{
// 启动Windows socket 2.x环境
WORD ver = MAKEWORD(2, 2);
WSADATA dat;
WSAStartup(ver, &dat);
//-----------------
// 用Socket API建立简易TCP服务器端
// 1建立一个Socket
SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
// 2 bind 绑定用于接收客户端连接的网络端口
sockaddr_in _sin = {};
_sin.sin_family = AF_INET;
_sin.sin_port = htons(4567);
_sin.sin_addr.S_un.S_addr = INADDR_ANY;//inet_addr("127.0.0.1");
if (bind(sock, (sockaddr*)&_sin, sizeof(_sin)) == SOCKET_ERROR) {
printf("Bind Port Error\n");
}
else {
printf("Bind Port Success\n");
}
// 3 listen 监听网络端口
if (listen(sock, 5) == SOCKET_ERROR) {
printf("listen failed\n");
}
else {
printf("listen success\n");
}
// 4 accept 等待客户端连接
sockaddr_in clientAddr = {};
int cAddrlen = sizeof(sockaddr_in);
SOCKET csock = INVALID_SOCKET;
csock = accept(sock, (sockaddr*)&clientAddr, &cAddrlen);
if (csock == INVALID_SOCKET) {
printf("failed , recieve a invalid client socket\n");
}
printf("new client join:socket = %d , IP = %s \n", csock , inet_ntoa(clientAddr.sin_addr));
char recvbuf[128] = {};
while (true) {
// 接收客户端的请求数据
int len = recv(csock, recvbuf, 128, 0);
if (len <= 0) {
printf("client exit\n");
break;
}
printf("收到命令:%s\n", recvbuf);
// 处理请求
if (0 == strcmp(recvbuf, "getName")) {
char buf[] = "JianFeng";
send(csock, buf, strlen(buf) + 1 , 0);
}
else if (0 == strcmp(recvbuf, "getAge")) {
char buf[] = "24";
send(csock, buf, strlen(buf) + 1, 0);
}
else {
char buf[] = "???";
send(csock, buf, strlen(buf) + 1, 0);
}
}
// 6 关闭套接字
closesocket(sock);
WSACleanup();
return 0;
}