2015-12-11 48 views
-1

我已經使用TCP的問題。 當我在客戶端或服務器中讀寫數據時,他應該每次讀取它作爲一個數據包。TCP數據是越來越附着在彼此

但有時當我寫數據非常快(在一個循環中一個例子)客戶機接收它作爲一個數據,而不是處理其作爲例如三個不同的分組。

發送數據:

messageToSend = Encoding.ASCII.GetBytes(data);   
c.GetStream().Write(messageToSend, 0, messageToSend.Length); 

接收客戶端:

byte[] message = new byte[1024]; 
int i = 0; 
i = c.GetStream().Read(message, 0, message.Length); 
Encoding.ASCII.GetString(message, 0, i); 
//Handle the new data.... 

希望它是不夠清楚,在此先感謝!

+0

顯示你如何將數據寫入到客戶端。 – Cyclonecode

+0

類似的東西:'messageToSend = Encoding.ASCII.GetBytes(data); 。 c.GetStream()寫(messageToSend,0,messageToSend.Length);' – cnc

回答

1

TCP設計是流協議它被疊起來的緩衝區,如果你沒有足夠快地讀出來。例如UDP就是dgram協議,它具有可單獨讀取的固定數據包。

+0

是的,我這樣做是一個之前使用UDP,但我想嘗試的TCP。有沒有可以幫助我的國旗? – cnc

+0

@cnc編號TCP不會爲您提供數據包/幀API。您需要在TCP上發送/接收的數據中以某種方式自己處理,以便您可以將對應用程序有意義的數據包彼此分開,以便您可以知道何時有完整的數據包等。 – nos

+0

@nos所以你說我需要添加到字符串BEGIN和END並拆分它? – cnc