簡體   English   中英

維護雙向UDP連接

[英]Maintaining a bidirectional UDP connection

我正在編寫一個Android UDP客戶端,它與Windows服務器連接並雙向通信(發送和接收的消息之間沒有關系)。 一旦將初始數據報發送到服務器,我希望能夠隨時向任一方向發送數據。 我的問題是:

1)保持初始插座打開並將其用於發送和接收是否正確?

2)我應該在同一個線程中發送和接收(接收時超時)還是在單獨的線程中(允許接收阻塞)?

3)如果在一定時間間隔內沒有發送/接收數據,套接字是否會自動關閉?

  1. 是的,這沒問題,是處理雙向通信最方便的方法。 此外,如果客戶端位於NAT后面,則打孔需要正常工作。 即使您綁定到客戶端上的相同IP和端口,也不能保證在NAT中獲得相同的映射。 因此,服務器可能無法訪問客戶端。 請記住,這些映射超時並從NAT網絡內部啟動,因此如果客戶端長時間處於空閑狀態,可能需要進行一些探測。

  2. 這取決於您如何設計應用程序,但這樣做沒有問題。 只需使用例如select監視套接字的讀寫狀態即可。 如果創建一個與讀/寫隊列結合的非阻塞套接字,則確保永遠不會阻止操作。 由於UDP要么全部寫入,要么全部寫入,隊列非常簡單。

  3. 根據我的經驗,這是Android上特定於供應商的。 有些手機長時間打開插座,有些手機在一定的閑置時間后關閉插座。 當設備進入休眠狀態時(按下電源按鈕時的狀態),所有電話似乎都會關閉套接字,除了與后台任務相關的狀態。

暫無
暫無

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

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