C ++ - 具有多个客户端的UDP服务器

问题描述 投票:0回答:1

我正在学习插座。我正在编写一个简单的UDP服务器,通过它发送小消息。所有活动客户端每三分钟发送一次“keepalive”消息,以便服务器可以查看哪些客户端在线。

这些消息在流中接收

流功能:

void keepAlive(SOCKET udp)
{
int len=0;
while(true)
{
 int len=recvfrom(udp,requestBuffer,maxMessage,0,(sockaddr*)&cliAddr,&cliAddrSize)
// Actions with the received message
}
}

但是,如果套接字已经“忙”,如何实现消息传输到所有客户端或特定客户端。需要创建一个新的套接字来发送消息? (在服务器上和客户端上)?如果客户端在NAT后面?

同样的问题也在客户端(因为keepalive被带到了线程,但在解决这个问题时,另一个也正在解决)

c++ windows server udp winsock
1个回答
0
投票

服务器收到keepalive消息后,您已经在cliAddr中获得了客户端地址。然后,您可以使用sendto函数向客户端发送内容。如果你想使用其他套接字,你可以做到。如果客户端在NAT后面?没关系。如果服务器获得了WAN地址,路由器会将LAN中的IP地址和端口转换为WAN地址和端口。您在服务器中获得的客户端地址是WAN地址和端口。 WAN(地址和端口) - 映射 - LAN(地址和端口)。

在客户端,我建议你创建一个线程来收集消息并处理它们(包括keepalive消息或其他类型)。

© www.soinside.com 2019 - 2024. All rights reserved.