From 67a5e3d825fde17b7b00906ce42b0bd8cafebc4e Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期四, 18 八月 2022 18:22:14 +0800 Subject: [PATCH] '完善' --- app/SocketManager.cpp | 78 +++++++++++++++++++++------------------ 1 files changed, 42 insertions(+), 36 deletions(-) diff --git a/app/SocketManager.cpp b/app/SocketManager.cpp index 98621bb..dc80b01 100644 --- a/app/SocketManager.cpp +++ b/app/SocketManager.cpp @@ -61,47 +61,53 @@ } void SocketManager::runSocketServer(void* context) { - //创建server - WSADATA wsaData; - WSAStartup(MAKEWORD(2, 2), &wsaData);//初始化 - socketServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); - sockaddr_in sockaddr; - sockaddr.sin_family = AF_INET; - sockaddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY); - sockaddr.sin_port = htons(LOCAL_SERVER_PORT); - int result; - if (bind(socketServer, (const struct sockaddr*)&sockaddr, sizeof(sockaddr)) == SOCKET_ERROR) { - closesocket(socketServer); - WSACleanup(); - printf("绑定失败\n"); - return; - } - //在本地绑定端口 - result = listen(socketServer, SOMAXCONN);//开始监听 - - SocketManager* sm = (SocketManager*)context; - - - printf("wait for connection...\n"); - - - while (true) + //出错之后重新创建socket server + for (;;) { - int nsize = sizeof(SOCKADDR); - SOCKADDR clientAddr; - SOCKET client = accept(sm->socketServer, &clientAddr, &nsize); - if (client == SOCKET_ERROR) + //创建server + WSADATA wsaData; + WSAStartup(MAKEWORD(2, 2), &wsaData);//初始化 + socketServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + sockaddr_in sockaddr; + sockaddr.sin_family = AF_INET; + sockaddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY); + sockaddr.sin_port = htons(LOCAL_SERVER_PORT); + int result; + if (bind(socketServer, (const struct sockaddr*)&sockaddr, sizeof(sockaddr)) == SOCKET_ERROR) { + closesocket(socketServer); + WSACleanup(); + printf("绑定失败\n"); + return; + } + //在本地绑定端口 + result = listen(socketServer, SOMAXCONN);//开始监听 + + SocketManager* sm = (SocketManager*)context; + + + printf("wait for connection...\n"); + + + while (true) { - cout << "连接失败" << endl; - continue; + int nsize = sizeof(SOCKADDR); + SOCKADDR clientAddr; + SOCKET client = accept(sm->socketServer, &clientAddr, &nsize); + if (client == SOCKET_ERROR) + { + cout << "socket-server 连接失败:" << client << endl; + break; + } + + thread msg(SocketManager::processMsg, client, context); + msg.detach(); } - thread msg(SocketManager::processMsg, client, context); - msg.detach(); + closesocket(socketServer); + WSACleanup(); + //重新创建的时间间隔为2s + Sleep(2000); } - - closesocket(socketServer); - WSACleanup(); } -- Gitblit v1.8.0