0

既存のサーバーソリューションにリクエストを送信して、結果を書き出そうとしています。サーバーは私の特定のリクエストで合計4つのメッセージを送信していますが、返されるメッセージの数は最初のクエリによって異なる場合があります。

サーバーにクエリを正常に送信できますが、応答の読み取りに関しては、1つのメッセージしか読み取ることができません。サーバーログには、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();

    }
4

1 に答える 1

2

私の推測では、すべてのメッセージは最初ので読まれますRead。サーバーが応答すると、すべてのデータがWindowsの受信バッファーにスタックし、一度にすべて読み取られます。

Wiresharkを使用することをお勧めします。これは、ネットワークプログラミングを行うときに多かれ少なかれ必須です。サーバーから戻ってくる4つのメッセージを少なくとも4つの異なるtcpパケットとして見ることができます。

于 2013-02-12T16:55:51.583 に答える