2013-09-30 24 views
0

我正在處理客戶端服務器應用程序。TCPClient - 發送和接收重疊

我爲服務器和客戶端都使用TCPClient。

服務器偵聽並響應,客戶端將發送和接收。每個從服務器響應包含不同的消息長度。

客戶端有2個請求。一個是ping請求,另一個是發送數據請求。

我創建了一個線程來每10秒鐘ping一次服務器。

當用戶按下發送按鈕時,客戶端發送數據請求。

服務器通過向客戶端發送2個字節來響應ping請求。

服務器通過發回8個字節來響應數據請求。

這是我遇到的問題。

ping線程有時會在用戶按下發送按鈕的同時將請求發送到服務器。

現在數據請求方法正在從套接字讀取,並期待8個字節,但只有得到2個字節,因此掛起很長一段時間。

這裏是從數據請求方法的代碼片段:

byteBuffer = new byte[8]; 
remainingBytes = byteBuffer.Length; 
numberOfBytesRead = netStream.Read(byteBuffer, index, remainingBytes); 

這裏是從平線的片段:

byteBuffer = new byte[2]; 
remainingBytes = byteBuffer.Length; 
numberOfBytesRead = netStream.Read(byteBuffer, index, remainingBytes); 

我能做些什麼,以便客戶端知道哪個響應去哪些方法?

感謝

回答

2

您需要:

  1. 單個線程讀取的一切。
  2. 每條消息前面的標識符:REQUEST或PING。

讀線程讀取一個字節,決定它是哪一個字節,需要讀取更多的字節並作出響應。