500ms內需要接收7M左右的大資料網路包,用VC實作,需要怎樣寫接收端的程式?不甚感激!
uj5u.com熱心網友回復:
7MB/0.5s=14MB/s=112Mbit/s百兆網滿足不了。
uj5u.com熱心網友回復:
這邊用的是千兆網uj5u.com熱心網友回復:
簡單,滿足網路條件的情況下,如果你只是針對于這一個條件(500ms接收7MB位元組),那么只需要做如下操作即可:
char *buf = NULL;
int index =0, pkt_len = 8 * 1024 * 1024;
// 省略指標檢查
buf = new char[pkt_len];
memset(buf, 0, pkt_len);
while (TRUE)
{
int len = recv(buf + index, pkt_len - index); // 簡化的接收API,僅僅為了說明流程
index += len;
if (index >= x) // x為你設定的或者通過協議頭所獲取的包長度
{
// do anything
// 你可以在這里做協議處理,也可以轉到另一個緩沖區中通過worker來做協議處理
}
}
以上步驟完全滿足你所設定的場景要求
uj5u.com熱心網友回復:
不需在特別的設定啊.你只需要用TCP, 一邊不停的發送, 一邊不停的接收就能搞定.
每次發送的資料大一點, 比如一次發送1M.
然后, 最好不要有磁盤IO操作, 因為這個會比較慢.
我們有千兆網下, 接收速度最高可達125MB/s 已經基本達到千兆極限.
但有些電腦會因為網卡或者CPU的原因, 達不到.這么高, 但 30MB/s -- 50M/s 一般的電腦都能達到.
你才14MB/s, 完全沒有問題.
uj5u.com熱心網友回復:
實際使用程序中,讀取的是字串資料,經測驗一次只能讀取約為8000長度的字串,需要采用回圈讀取方式來讀取,這種方式在長時間運行后會出現某一包讀不上來的情況,不知道這種現場各位大神有沒有遇到過。uj5u.com熱心網友回復:
現在是程式是把一次讀取的資料量設定為8000byte,回圈讀取,直到7M的資料全部讀完,但是運行一個多小時后,會出現網路接識訓取資料失敗的現象,不知道該如何解決。uj5u.com熱心網友回復:
失敗就要看失敗原因,也不是所有的“失敗”都是表示失敗。
比如異步socket回傳-1,GetLasterror()回傳10056,這并不表示失敗,而僅僅是表示“你的請求我接受了,你安心的等待結果就好了”。 所以說要具體問題具體分析。
另外就是“TCP的粘包”問題導致的讀取資料問題,這個問題主要原因是coder們沒有定義好“規則”或者定義好了“規則”,但是沒有處理好“規則”。
uj5u.com熱心網友回復:
使用VC編程,recv函式接收資料,回傳值為-1,錯誤代碼是10060uj5u.com熱心網友回復:
10060 由于連接方在一段時間后沒有正確答復或連接的主機沒有反應,連接嘗試失敗。任何收發兩端速度不一致的通訊,都需要在它們之間使用一個足夠大的FIFO緩沖區。
對任何FIFO緩沖區的使用,都需要仔細考慮接收端接收時超時無資料和發送端發送時FIFO緩沖區已滿這兩種情況下該如何做。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/108132.html
標籤:網絡編程
上一篇:MFC對話框初始化隱藏問題
