套接字TCP C#比缓冲区更多数据

时间:2015-12-15 19:43:50

标签: c# sockets loops tcp

我的目标
我有一台服务器将数据发送回客户端。客户端从缓冲区中读取数据,将其连接并将其反序列化为某种类型的对象。

问题
现在有时会发生接收数据的循环在收到所有数据之前退出,因此我想要反序列化的数据不完整。我认为这种情况发生了,因为客户端处理数据的速度太快。客户希望处理更多数据,但没有可用的数据 当发送的数据超过缓冲区可以容纳的数据时,会发生这种情况。最初的想法是阅读块并连接它们,但这并不总是完全有效。

理念
有没有办法告诉客户端应该接收多少数据,所以我可以修改循环并在处理之前收到所有数据?

这就是我的接收方法基本上是这样的:

private void receiveData()
{
    byte[] data = new byte[8 * 1024];
    int bytesReceived;

    // list that gathers all data from all chunks
    List<byte> totalData = new List<byte>();

    do
    {
         // receive one chunk of data
         bytesReceived = clientSocket.Receive(data);

         // copying all bytes received to a byteArray of the exact size
         byte[] dataExtracted = new byte[bytesReceived];
         Array.Copy(data, dataExtracted, bytesReceived);

         // Add the byteArray to the total data received
         totalData.AddRange(dataExtracted);
    } while (clientSocket.Available > 0);

    // Do something with totalData received
}

我正在寻找一种接收所有数据的方法,在我处理它之前,但我不知道如何进行循环或更好地如何设置这里的条件。任何有关调查的帮助或链接都表示赞赏。

0 个答案:

没有答案