2013-02-12 2 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

에릭 (Eric)이 말한대로 나를 에워 쌌습니다. – MarcF

+0

몇 바이트를 보내고 있습니까? totalBytesReceived를 Read()에 대한 오프셋으로 전달하므로 배열 크기로 지정한 1024 바이트를 초과하여 읽을 수 없습니다. –

+0

1024는 서버 측에서 하드 코딩 된 최대 크기입니다. –

답변

2

내 생각 엔 모든 메시지는 첫 번째 Read에서 읽을 것입니다. 서버가 응답하면 모든 데이터가 창 수신 버퍼에 고착되어 한 번에 읽을 수 있습니다.

네트워크 프로그래밍을 할 때 어느 정도 의무적 인 Wireshark을 사용하는 것이 좋습니다. 적어도 4 개의 다른 tcp 패킷으로 서버에서 오는 4 개의 메시지를 볼 수 있습니다.

+0

나는 서버가 보내고있는 데이터를보고 있으며 나는 아주 이상한 것을 얻고있다. 3 개의 메시지가 나에게 되돌려지고 있습니다. 첫 번째 두 메시지에는 예상 한 내용이 들어 있으며 마지막 메시지에는 네 개의 메시지가 모두 들어 있습니다. –

+0

아마도 서버 코드에 버그가 있습니까? – Eric

관련 문제