請問,如果我的收發都用的一根網線,資料不停的收,我也不停的發,如果對方收的慢,或者不收,我這樣的操作最后會是什么情況呢?
uj5u.com熱心網友回復:
可能會丟包,要檢查發送緩沖區是否已經滿了,如果滿了就停止往里寫資料,否則就會丟包。uj5u.com熱心網友回復:
不需要你做任何事情。tcp協議本身有完整機制保證資料收發,這個我們不多解釋,自己百度“tcp 移動視窗”
其實很多人剛入門這塊都必須解決一個問題,那就是。發不是發,收也不是收
因為在你們之間還有 發送快取,接收快取,還有底層協議,底層通訊保證。
所以你說你不停收,其實不是你不停收,而是底層不停收,你只是從緩沖區取了,而緩沖區告訴對方可以移動視窗發下一個物理包了
而你說不停發,其實也不是你不停發,你發的其實也在緩沖區,底層這根據協議判定是否需要移動視窗發送下一個物理包,如果對方收的慢,移動視窗就移動的慢,如果對方不收,緩沖區滿或者發送超時,你會得到一個例外
所以你不需要做什么,你需要做得只是等待例外,如果沒有例外,那只是網路慢,對方慢,你也無能為力
uj5u.com熱心網友回復:
那怎么知道緩沖區滿了?
uj5u.com熱心網友回復:
那我服務端收到的資料,我處理一下,用tcpclient向服務端發送資料用send([]byte),第一次聯調還挺好。第二次聯調資料發不出去了,我看有回傳值,但對方收不到,在后面加了個.socketflag.NONE,就發出去了。第三次聯調,我只收資料程式就滿問題,我一開啟發資料,我的接收端的資料都被卡住了。我不發資料,我的接收端資料又過來了,而且速度很快。后來又嘗試用sendasync(),我的程式會記憶體溢位。你知道都是些什么原因啊?轉載請註明出處,本文鏈接:https://www.uj5u.com/net/234096.html
標籤:C#
