套接字接收数据未完成



>我写了简单的套接字,将特定请求发送到互联网服务器并接收响应但是当请求发送并且套接字进入返回值的接收模式结果时遇到问题不完整,例如只有 1075 字节的 25000 字节接收。

Socket skt = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
skt.Connect(hdr.Host, 80);
byte[] req_as_bytes = Encoding.UTF8.GetBytes(RequestParam);
SentLength = skt.Send(req_as_bytes);
skt.Send(Data, SocketFlags.None);
ReturnLength = skt.Receive(Data);
skt.Shutdown(SocketShutdown.Both);
skt.Close();

但是当我在 skt.recive() 数据像这样从服务器完整接收之前睡觉时

Socket skt = new Socket(AddressFamily.InterNetwork, SocketType.Stream,             ProtocolType.Tcp);
skt.Connect(hdr.Host, 80);
byte[] req_as_bytes = Encoding.UTF8.GetBytes(RequestParam);
SentLength = skt.Send(req_as_bytes);
skt.Send(Data, SocketFlags.None);
System.Threading.Thread.Sleep(4000);
ReturnLength = skt.Receive(Data);
skt.Shutdown(SocketShutdown.Both);
skt.Close();

解决此问题的最佳解决方案是什么

套接字。接收 返回读取的数据数。见 http://msdn.microsoft.com/en-us/library/8s4y8aff.aspx

您应该检查ReturnLength并循环,直到收到预期数据。

TCP是一个面向流的协议。您将按照发送的顺序接收数据,但不能保证发送和接收的数据块是相等的。