TCPClient.Как я могу получать большие сообщения? - PullRequest
0 голосов
/ 13 марта 2012

У меня есть следующий код:

private string Connect()
{
    string responseData;

    try
    {
        TcpClient client = new TcpClient(ServerIp, Port);
        client.ReceiveBufferSize = Int32.MaxValue;

        Byte[] data = Encoding.GetEncoding(1251).GetBytes(ReadyQuery);


        NetworkStream stream = client.GetStream();

        // send data
        stream.Write(data, 0, data.Length);


        // buffer
        data = new Byte[65536];               

        Int32 bytes = stream.Read(data, 0, data.Length);
        responseData = Encoding.GetEncoding(1251).GetString(data, 0, bytes);                

        // close all
        stream.Close();
        client.Close();
        return responseData;
    }

У меня проблема с большим сообщением.Размер получаемого сообщения составляет 22 тыс. Символов.Я получаю только часть сообщения.
Как я могу получать большие сообщения?

PS.В отладчике bytes равно 4096.

1 Ответ

4 голосов
/ 13 марта 2012

Вы вызываете поток. Читайте в цикле, пока не прочитаете все сообщение.Если вы заранее знаете размер сообщения, это относительно просто:

int messageSize = 22000;
int readSoFar = 0;
byte [] msg = new byte[messageSize];

while(readSoFar < messageSize)
{
    var read = stream.Read(msg, readSoFar, msg.Length - readSoFar);
    readSoFar += read;
    if(read==0)
        break;   // connection was broken
}

Если размер сообщения является частью сообщения (скажем, закодировано в первых 4 байтах), вы должны сначала прочитать их, а затем сделать какЯ предложил.

...