簡體   English   中英

C ++-具有多個客戶端的UDP服務器

[英]C++ - UDP server with multiple clients

我正在學習套接字。 我正在編寫一個簡單的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消息或其他類型)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM