簡體   English   中英

從特定客戶端接收 udp 數據包

[英]receiving udp packets from a specific client

我正在嘗試使用“接受”function 來實現 UDP 服務器,就像 TCP 中的服務器一樣。 那是因為我需要為每個客戶保留一個頻道。 我的問題是如何讓 UDP 套接字從特定客戶端(特定客戶端的 ip 和端口)接收數據?

TCP 使用主 Socket(在線程內)接收來自客戶端的請求。 一旦來自客戶端的請求到來,主套接字就會打開另一個套接字來與該客戶端通信(在另一個線程中)。 為了實現這個機制,綁定套接字以接收來自特定客戶端的數據包的能力必須可用。 我所要求的這種能力。 如何為 UDP Sockets 重新實現“接受”function? 其中(據我所知)無法綁定 Socket 以從特定客戶端接收。 我的問題是如何使它成為可能?

要實現這種機制,必須能夠綁定套接字以接收來自特定客戶端的數據包。

bind沒有指定可以連接的遠程客戶端,而是指定了數據應該發送到的本地地址。 這在 UDP 中與在 TCP 中相同。 在 TCP 中不可能只accept一個特定的客戶端,但是可以accept一個連接,如果它是錯誤的客戶端,然后簡單地關閉它。

使用 UDP 可以bind套接字以接收本地 IP 和端口上的數據。 還可以connect UDP 套接字以僅從特定客戶端 IP 和端口獲取數據。 Note that this is different from connect in TCP: in TCP it actively establishes a connection (ie packets get exchanged during TCP handshake) whereas in UDP it only sets the peers address on the socket.

connect到特定客戶端 IP 是不可能的。 connect需要 IP 和端口。 如果事先不知道客戶端源端口,可以創建一個未連接但綁定的 UDP 套接字,在其上調用recvfrom ,然后connect套接字連接到客戶端 IP, recvfrom返回的端口(或創建一個新的綁定和連接的套接字)如果它是預期的客戶。

暫無
暫無

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

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