2013-02-12 44 views
0

我正在嘗試向現有服務器解決方案發送請求並寫出結果。服務器總共發送了4條包含我的特定請求的消息,但返回的消息數量可能因初始查詢而異。TCP客戶端讀取第一條消息但不是其餘

我能夠成功發送查詢到服務器,但是當涉及到讀取響應我只能讀取一條消息。服務器日誌顯示4個已發回。

請幫忙。

 IPHostEntry hostEntry = Dns.GetHostEntry(server_textbox.Text); 
     IPEndPoint endPoint = new IPEndPoint(hostEntry.AddressList[0], port); 
     string data = String.Empty; 
     testclient = new TcpClient(server_textbox.Text, port); 
     testclient.ReceiveBufferSize = 1024; 
     testclient.SendBufferSize = 1024; 
     NetworkStream netStream = testclient.GetStream(); 
     Byte[] message_byte = new System.Text.ASCIIEncoding().GetBytes(msg2); 
     netStream.Write(message_byte, 0, message_byte.Length); 

     Byte[] returnMessage = new byte[1024]; 
     Int32 totalBytesReceived = 0; 
     Int32 bytesReceived = 0; 
     try 
     { 

      while ((bytesReceived = netStream.Read(returnMessage, totalBytesReceived, returnMessage.Length)) > 0) 
      { 
       totalBytesReceived += bytesReceived; 
       data += "\n" + ASCIIEncoding.ASCII.GetString(returnMessage); 

       bytesReceived = 0; 
      } 
     } 
     catch (Exception error) 
     { 
      MessageBox.Show(error.ToString()); 
     } 
     result_box.Text += data; 
     netStream.Close(); 
     testclient.Close(); 

    } 
+0

埃裏克打敗了我,他說了什麼。 – MarcF 2013-02-12 16:56:34

+0

你發送多少個字節?因爲您將totalBytesReceived傳遞爲Read()的偏移量,所以您將無法讀取超過指定爲數組大小的1024個字節。 – 2013-02-12 17:00:06

+0

1024是我可以在服務器端接收硬編碼的最大尺寸。 – 2013-02-12 17:01:38

回答

2

我的猜測是你的所有消息都是在第一個Read中讀取的。當服務器回覆時,所有數據都卡在窗口接收緩衝區中,並一次讀取所有數據。

我會推薦使用Wireshark,這在做網絡編程時或多或少是強制性的。您將能夠看到從服務器返回的4條消息至少有4個不同的tcp數據包。

+0

我正在查看服務器發回的數據,我收到了一些很奇怪的東西。我得到3條消息被推回給我。前兩條消息包含我期望的內容,最終消息包含所有四條消息。 – 2013-02-12 17:14:38

+0

也許你在服務器代碼中有一個錯誤? – Eric 2013-02-12 17:30:38

相關問題