0
我写了一个简单的套接字发送特定的请求到互联网服务器,并收到回应 但我有问题,当请求发送和套接字去接收模式结果的返回值 是不完整的,例如只有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()之前数据complitly从服务器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();
什么是解决这个问题
当i循环中接收之后第一接收抛出异常 – Moharrer
做 { 一个= skt.Receive(数据,ReturnLength,500“的现有连接被强行关闭远程主机” * I - ReturnLength,SocketFlags.None ); skt.Receive(Data); ReturnLength + = a; i ++; } while(a!= 0); – Moharrer
@Moharrer可能发送者在读取器获取所有数据之前关闭连接。你应该设备一些协议来同步它们。例如,发送数据长度,发送数据,等待OK等。 –