使用大于1个字节的缓冲区时服务器的回复不完整

时间:2014-09-09 08:56:20

标签: c# buffer tcpclient tcpsocket

我正在使用TCP套接字向服务器发送XML格式的消息。服务器响应完整的消息(我已经使用WireShark检查过),但我在完成它时遇到了问题。当我使用大于1个字节的缓冲区时,响应在消息的末尾缺少缓冲区的剩余大小。当使用1字节缓冲区时,它可以在99%的情况下工作。我认为它与我正在使用的StringBuilder有关,但我已经没有想法了。我也尝试了NetworkStreamStreamSocket,但没有运气。任何帮助或回应将不胜感激。

    public string StartClient(string message, string ip, int port) {

    byte[] bytes = new byte[1];
    int bytesRec = 0;
    StringBuilder reply = new StringBuilder();

    try {
        IPAddress ipAddress = IPAddress.Parse(ip);
        IPEndPoint remoteEP = new IPEndPoint(ipAddress, port);

        Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            sender.Connect(remoteEP);

            byte[] msg = Encoding.ASCII.GetBytes(message);

            sender.Send(msg);

            do
            {
                bytesRec = sender.Receive(bytes);

                if (bytesRec == 0)
                {
                    sender.Shutdown(SocketShutdown.Both);
                    sender.Close();
                    break;
                }

                else
                {
                    reply.Append(Encoding.ASCII.GetString(bytes, 0, bytesRec));
                }
            } while (sender.Available > 0);
        }

    catch (Exception e) 
    {
        return e.ToString();
    }

    return reply.ToString(); ;
}

1 个答案:

答案 0 :(得分:0)

尝试更改行:

while (sender.Available > 0)

为:

while (bytesRec > 0)