之前由于現實網路狀況復雜,連接并不穩定。
我就設定了發送UDP包大小,情況有所好轉
但不理想,我又設定了,超時就重新關閉Socket,再連接服務器
這樣之后就好很多了。
今天出來了種情況
用著好好的,突然服務器無法收到客戶端的訊息
重新打開程式也一樣連接不了,直到我手動重連路由器才成功
各位開發SOCKET時,遇到連接例外一般怎么處理的?
如何能保證有網的情況下,長時間的通訊?
uj5u.com熱心網友回復:
你都說udp了,還討論啥中斷不中斷的。udp沒有中斷不中斷這么一說。
uj5u.com熱心網友回復:
你是 TCP 還是 UDP?這兩個區別可大了去了。uj5u.com熱心網友回復:
客戶端不是固定IP吧,客戶端有沒有定時發送心跳包?不知道你網路是怎么的不固定法。還是你客戶端多個網卡,如果多個網卡你需要寫好路由。傳資訊還好,傳檔案的可能你要弄個重傳的。
uj5u.com熱心網友回復:
不是啊,就有這么種情況
A 發送包 到B
但是沒收到,你再重發還是收不到
需要關閉UDP后重新發,就收到了,非常怪
uj5u.com熱心網友回復:
UDP是無連接的,但你還說什么連接,不清楚你說的是什么情況?
uj5u.com熱心網友回復:
udp本身無連接,本身不保證一定能收到udp的服務器端只需要監聽埠,當然客戶端發的東西不一定能到達,也不一定是保證順序到達。(比如像ssdp協議,默認都是發10條,因為就一條udp訊息,他可不保證服務器一定就能收到)
如果你需要保證資料請用tcp。如果一定是udp,則需要使用協議本身保證,比如訊息序號(因為udp不保證順序,所以你收的順序是不一定),比如訊息回復及重試。服務器主動請求斷掉的資料(比如視頻流類udp協議,服務端根據序號排序去請求缺失的udp資料幀)
uj5u.com熱心網友回復:
上面是理論上的一些方式在討論你這個問題的時候,我們要需要問“服務器無法收到客戶端的訊息”,這個是真沒收到,還是你的程式沒處理好
以前的貼子我們也說過,程式員不相信一切,甚至不相信自己,我們只相信機器
所以你告訴我們“服務器無法收到客戶端的訊息”------這個是真的么?是收到了,你沒處理,還是真的沒有位元組過來,需要打個問號
uj5u.com熱心網友回復:
熊貓哥啊,當然是沒收到,我都用了快一年了,偶爾會出現幾次我描述的,需要重新關閉SOCKET才能通訊
沒收到回應,就0.5秒一次一直重發,然后查看服務器記錄一條都沒有
這是偶爾出現的情況,大部分是正常的
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/109113.html
標籤:C#
上一篇:visual studio2019中始終無法安裝android sdk28
下一篇:C#上位機打包問題
