2012-04-20 125 views
0

我有一個簡單的C程序將圖像從使用TCPTCP客戶端無法

問題是,它總是失敗,某些圖像處理的服務器進行復制,它僅接收「× '字節然後超時。

該程序不是這裏的問題,因爲我已經嘗試過使用TCP的不同程序(C和python使用更大的recv緩衝區),它們仍然在第x個字節失敗。

server: vxworks 
client: linux 

,如果我嘗試使用相同的代碼從SUN的客戶端連接,它有沒有問題,接收圖像。我做了一些數據包嗅探,發現我的客戶端正在請求包含'x'字節的數據包'A'。服務器發送它或重新發送它,但客戶端永遠不會確認它並最終超時。

問題是爲什麼這個圖像特定?只發生在Linux客戶端?

寫入到客戶端的文件始終是「X」個字節長

回答

1

它看起來像網絡的問題,對我來說。包的大小是多少?聽起來很奇怪,但不可能是服務器和Linux之間的MTU黑洞?

+0

大小如果1514與數據1460 ...但爲什麼只失敗這個特殊的形象,而不是其他人? – maheshg 2012-04-20 21:23:52

+0

特別是在失敗和該圖像之間必須沒有連接。簡單地說,如果沒有指定預期有多少字節的協議層,則無法可靠地「傳輸」任意大小的數據。 – ShinTakezou 2012-04-20 21:52:54

1

我的朋友曾經遇到過這個完全相同的問題,結果證明他所傳輸的二進制映像的有效載荷在過濾路由器中沿途觸發了一個錯誤。當一個特定的字節序列通過時,路由將會丟棄連接。奇怪而真實。

+0

這可能是有道理的,因爲SUN的切片與Linux的切片不同......這種特殊的字節序列僅在TCP數據有效載荷結束時才能看到,這是數據包客戶端不斷請求並超時的原因。 – maheshg 2012-04-20 22:00:14

+0

你知道系統細節或引起問題的字節序列麼? – maheshg 2012-04-20 22:10:08

+0

在2000年左右在HP電腦上看到類似的東西。死亡位圖 - 如果保存到磁盤上,會導致Windows上出現BSOD。 – 2012-04-20 22:56:54