qq_42120274 2021-05-23 16:16 采纳率: 0%
浏览 12

socket循环创建线程问题

DWORD WINAPI createClientThread(void* lpParam)
{
	Server* server = (Server*)lpParam;
	while (TRUE)
	{
		server->resultsValue = send(server->socketclient, "欢迎登录服务器", strlen("欢迎登录服务器") + 1, 0);
		if (SOCKET_ERROR == server->resultsValue)
		{
			server->resultsValue = WSAGetLastError();
			if (WSAEWOULDBLOCK == server->resultsValue)
				continue;
			else if (WSAENETDOWN == server->resultsValue || WSAETIMEDOUT == server->resultsValue || WSAECONNRESET == server->resultsValue)
			{
				char bufIp[IP_BUF_SIZE];
				inet_ntop(server->addressClient.sin_family, &server->addressClient, bufIp, IP_BUF_SIZE);
				cout << bufIp << ": " << ntohs(server->addressClient.sin_port) << " the client closes the connection..." << endl;
				closesocket(server->socketclient);
			}
		}
		Sleep(10000);
	}
	return 0;
}

BOOL Server::createAcceptThread()
{
	while (TRUE)
	{
		dataLength = sizeof(SOCKADDR_IN);
		socketclient = accept(socketServer, (SOCKADDR*)&addressClient, &dataLength);
		if (INVALID_SOCKET == socketclient)
			return FALSE;
		char bufIp[IP_BUF_SIZE];
		inet_ntop(addressClient.sin_family, &addressClient, bufIp, IP_BUF_SIZE);
		cout << "A new client connected...IP address: " << bufIp << ", port number: " << ntohs(addressClient.sin_port) << endl;
		unsigned long ul;
		handleThread = CreateThread(nullptr, 0, createClientThread, (void*)this, 0, &ul);
	}
	return TRUE;
}

有多个客户都的话只能处理一个客户端,在代码中是每一个连接成功的客户端都创建一个线程处理不同客户端的,为什么只有一个客户端可以处理呢

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-07 17:38
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥20 c语言写的8051单片机存储器mt29的模块程序
  • ¥60 求直线方程 使平面上n个点在直线同侧并且距离总和最小
  • ¥50 java算法,给定试题的难度数量(简单,普通,困难),和试题类型数量(单选,多选,判断),以及题库中各种类型的题有多少道,求能否随机抽题。
  • ¥50 rk3588板端推理
  • ¥250 opencv怎么去掉 数字0中间的斜杠。
  • ¥15 这种情况的伯德图和奈奎斯特曲线怎么分析?
  • ¥250 paddleocr带斜线的0很容易识别成9
  • ¥15 电子档案元素采集(tiff及PDF扫描图片)
  • ¥15 flink-sql-connector-rabbitmq使用
  • ¥15 zynq7015,PCIE读写延时偏大