0

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

System.Net.Sockets.SocketException:远程主机在 System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size,SocketFlags socketFlags) 在 System.Net.Sockets 处强制关闭现有连接。 SimpleTcpClient.Main(String[] args) 处的 Socket.Receive(Byte[] 缓冲区)

我的代码:

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

1 回答 1

1

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

当您通过套接字发送字节时也是如此。您必须检查发送了多少字节,并在 Send 上循环,直到发送完所有字节。

此行为是由于网络层将消息拆分为多个数据包所致。如果您的消息很短,那么您遇到这种情况的可能性就较小。但是你应该总是为它编码。

每个缓冲区的字节数越多,您很可能会看到发送者的消息被分成多个数据包。每个读取操作都会收到一个数据包,这只是您的消息的一部分。但是小缓冲区也可能被拆分。

于 2012-04-19T23:18:49.643 回答