Socket連線的小知識,和乙個疑難雜症

2022-02-16 05:08:40 字數 994 閱讀 7486

我這篇文章說乙個socket的小技巧,另外諮詢乙個問題

這些天重點攻打socket

以前總覺得socket程式設計應該比較容易,也做過簡單的socket程式。

但真正要應用時,發現有很大問題!

我用c#語言

我這個程式用到的socket也不算多。大概50個socket客戶端連線到internet上不同伺服器上,用的是tcp協議。資料傳輸內容是一些瑣碎的包,總共用到網路頻寬大概512bps。

問題產生在資料延遲上了,程式對資料報的延遲要求很高,要求延遲平穩不跳動。程式每傳送乙個請求後,到從伺服器接受到的反饋資料時間差要求基本一致。此外,程式還不停接受從伺服器傳送來的一些資訊。

當開啟幾個socket的時候,效果非常好,實時性很高,延遲穩定

但開到40個socket的時候(每個socket連線不同伺服器),就完全不一樣了。傳送請求後,接收到伺服器響應的資料報的時間差距很大。從100ms~10000ms不等。這對於我的程式完全是個災難!!!

在查詢很多資料後,終於知道微軟有個nagle演算法。為了有效利用頻寬,nagle演算法會使得socket傳送短資料報盡量合併傳送,就產生乙個延遲。

使用socket.setsocketoption(socketoptionlevel.tcp,socketoptionname.nodelay,1)可以關閉nagle演算法。這樣發出的資料報就立刻出發了!~~ :)

程式效能終於有所改善,但還是有問題

資料報延遲從原來的100ms~10000ms變為100ms~2000ms了。這個延遲對我仍然是災難。而ping的時間是比較穩定的40~60ms

這個就是我要向大家諮詢的問題了

我也做了個測試,幾台電腦通過乙個電腦共享internet連線,然後在這幾台電腦上分別執行我的程式。發現延遲與所有電腦總連線數沒有關係,只與當前電腦上連線數量有關。當前電腦連線越多,延遲越不穩定!!~~~如果當前電腦只有乙個連線,其他電腦不管開多少連線都不會影響到這台電腦上程式的穩定!!~~~

這是什麼原因呢?應該如何解決呢?

謝謝大家

乙個socket小程式

一直對c c 下的socket程式設計必是很熟悉,今天終於完成了乙個很簡單的server client程式 伺服器 include include pragma ment lib,ws2 32.lib using namespace std const int my error 1 int main...

關於C scanf的乙個小知識

關於c 的scanf,其實在使用時有乙個注意的點。我們來看乙個簡單的例子。對於輸入的一行,如果這一行的開頭需要輸入乙個字元,例如這樣的輸入 a 10 20 b 30 a 3 50 我們可以使用這種方式來讀入,使用一段 來進行試驗 includeusing namespace std int main...

Python教程 乙個小栗子和乙個小練習

python教程正在更新中 檢視python教程目錄 學了這麼多,我們來做幾個小練習。1.從命令列讀入出生年份是2001年,並且計算年齡例如那麼今年的年齡就是19歲 birth year input birth year age 2020 birth year print age 這是我們最樸素的思...