C ++ - 具有多个客户端的UDP服务器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C ++ - 具有多个客户端的UDP服务器相关的知识,希望对你有一定的参考价值。
我正在学习插座。我正在编写一个简单的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被带到了线程,但在解决这个问题时,另一个也正在解决)
答案
服务器收到keepalive消息后,您已经在cliAddr中获得了客户端地址。然后,您可以使用sendto函数向客户端发送内容。如果你想使用其他套接字,你可以做到。如果客户端在NAT后面?没关系。如果服务器获得了WAN地址,路由器会将LAN中的IP地址和端口转换为WAN地址和端口。您在服务器中获得的客户端地址是WAN地址和端口。 WAN(地址和端口) - 映射 - LAN(地址和端口)。
在客户端,我建议你创建一个线程来收集消息并处理它们(包括keepalive消息或其他类型)。
以上是关于C ++ - 具有多个客户端的UDP服务器的主要内容,如果未能解决你的问题,请参考以下文章