簡體   English   中英

關於C#UDP套接字

[英]About C# UDP Sockets

  • 我應該使用C#中的UDP套接字連接到外部服務器。
  • 我無法理解服務器使用說明中的這兩行:

“強制使用專用套接字。”

“如果服務器與客戶端失去UDP連接,它將......”

我認為UDP套接字是無連接的! 那么“失去連接”是什么意思呢? 以及如何避免它? 是否有一種已知的方法來確保“專用插座”?

謝謝

“強制使用專用套接字。”

對我來說,為每個連接創建一個唯一的套接字,並在整個連接中使用它。

編輯:從服務器的角度來看,只是為了擴展這一點。

UDP套接字不是由遠程地址標識的,而是僅由本地地址標識,盡管每條消息都有一個關聯的遠程地址。 (來源)

這樣,服務器可以區分每個消息來自哪個客戶端。 由於遠程地址由IP地址和端口組合組成,因此在整個服務器通信期間應使用相同的套接字。 這是因為如果不這樣做,下次更改底層套接字時可能會為您分配一個不同的端口。

“如果服務器與客戶端失去UDP連接,它將......”

松散UPD連接是可能的,例如連接中的任何一個端點都丟失了,比如我去服務器並拔插頭?

EDIT2:Dan Bryant在評論中提出了一個很好的觀點,它與我所說的有關。

值得注意的一點是,調用UDP套接字可能會拋出SocketException並將SocketError.ConnectionReset作為錯誤代碼。 UDP沒有任何類型的結構化連接/斷開會話,但它確實使用動態分配的遠程端口來允許回復,這是一種“連接”。

嘗試不同的2小時后可能是隨機的解決方案:

  • 服務器希望您在一個端口上介紹自己,而不是用於實際發送數據的端口。 “專用插座”

  • 您知道要發送哪個IP和端口的開始信息,但您不知道哪個將用於實際數據傳輸。

1-您將創建您的套接字 - 使用已知的IPEndpoint,並在其上發送“開始消息”。

2-然后等待從任何IP接收...

3-服務器將響應“歡迎消息”,說明它將使用的端點。(通過更改Socket.ReceiveFrom()的參數ref remoteEP)

4-然后你必須更改你發送的端口=遠程端點端口+ 1 (為什么?標准方式或什么?)

5-最后,您可以使用這些端口正常發送和接收

暫無
暫無

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

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