我编写了简单的套接字,将特定请求发送到互联网服务器并接收响应 但是当发送请求并且套接字转到接收模式返回值的结果时我有问题 例如,仅完成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();
解决此问题的最佳解决方案是什么
答案 0 :(得分:3)
socket.Receive返回读取的数据。见http://msdn.microsoft.com/en-us/library/8s4y8aff.aspx
您应该检查ReturnLength
并循环直到收到预期的数据。
TCP是面向流的协议。您将按照发送的顺序接收数据,但不保证发送和接收的数据块相同。