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