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服务器的主要内容,如果未能解决你的问题,请参考以下文章

C语言 UDP socket 简单客户端 编程,急

c#UDP聊天程序,关于服务端和客户端的功能!急!!!!

c# udp 聊天 服务器发到客户端的数据为啥接受不到

是否有具有多个命名 Oidc 客户端的示例 quarkus 项目来调用多个服务调用?

用于 UDP 客户端的 Windows C 套接字编程

基于UDP的客户端和服务器端的代码设计