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

C++ - UDP server with multiple clients

本文关键字:客户端 UDP 服务器 C++      更新时间:2023-10-16

我正在学习套接字。我正在编写一个简单的UDP服务器,通过它发送小消息。所有活动客户端每三分钟发送一次"保持连接"消息,以便服务器可以看到哪些客户端处于联机状态。

这些消息在流中接收

流功能:

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被带到线程中,但是在解决这个问题时,另一个问题也在解决(

服务器收到保持连接消息后,你已经在 cliAddr 中得到了客户端地址。 然后,您可以使用 sendto 函数向客户端发送内容。 如果你想使用其他套接字,你可以做到。 如果客户落后于 NAT? 这不重要。如果服务器获得了 WAN 地址,路由器会将 LAN 中的 IP 地址和端口转换为 WAN 地址和端口。您在服务器中获得的客户端地址是 WAN 地址和端口。广域网(地址和端口(--地图--局域网(地址和端口(。

在客户端中,我建议您创建一个线程来接收消息并处理它们(包括保持连接消息或其他类型的消息(。