我的目标
我有一台服务器将数据发送回客户端。客户端从缓冲区中读取数据,将其连接并将其反序列化为某种类型的对象。
问题
现在有时会发生接收数据的循环在收到所有数据之前退出,因此我想要反序列化的数据不完整。我认为这种情况发生了,因为客户端处理数据的速度太快。客户希望处理更多数据,但没有可用的数据
当发送的数据超过缓冲区可以容纳的数据时,会发生这种情况。最初的想法是阅读块并连接它们,但这并不总是完全有效。
理念
有没有办法告诉客户端应该接收多少数据,所以我可以修改循环并在处理之前收到所有数据?
这就是我的接收方法基本上是这样的:
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
}
我正在寻找一种接收所有数据的方法,在我处理它之前,但我不知道如何进行循环或更好地如何设置这里的条件。任何有关调查的帮助或链接都表示赞赏。