在C#中读取大量字节抛出异常?

时间:2012-04-19 07:33:14

标签: c# sockets client-server

我有一个C#应用程序,它向服务器发送超过600,000个字节。服务器的响应超过10,000个字节。我遇到的问题是,当我读取超过10k字节时,它会引发异常:

  

System.Net.Sockets.SocketException:现有连接是   强行关闭远程主机   System.Net.Sockets.Socket.Receive(Byte []缓冲区,Int32偏移量,Int32   size,SocketFlags socketFlags)at   System.Net.Sockets.Socket.Receive(Byte [] buffer)at   SimpleTcpClient.Main(String [] args)

我的代码:

byte[] data = new byte[10000];
int receivedDataLength = server.Receive(data);
string Data = Encoding.ASCII.GetString(data, 0, receivedDataLength);

1 个答案:

答案 0 :(得分:1)

使用套接字时,必须预期套接字可能传输的字节数少于预期。您必须循环.Receive方法以获取剩余的字节。

通过套接字发送字节时也是如此。您必须检查发送了多少字节,然后循环发送直到发送所有字节。

此行为是由于网络层将邮件拆分为多个数据包。如果您的消息很短,那么您就不太可能遇到此消息。但是你应该总是为它编码。

每个缓冲区使用更多字节,您很可能会看到发送方的消息吐出多个数据包。每次读取操作都将收到一个数据包,这只是您邮件的一部分。但是小缓冲区也可能会分裂。