从 clientsocket 读取:ArgumentOutOfRangeException 未处理
Reading from clientsocket: ArgumentOutOfRangeException was unhandled
我正在使用本教程来了解它是如何工作的:
http://csharp.net-informations.com/communications/csharp-chat-server-programming.htm
(http://csharp.net-informations.com/communications/csharp-chat-client.htm)
这是我所做的:
- 下载代码
启动了两个 Visual Studio 实例:一个用于客户端,一个用于服务器端。
运行服务器:服务器运行很好
运行 客户端,在文本框中输入名称,按下连接按钮,这就是我在服务器程序的这一行中得到的结果:
networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
ArgumentOutOfRangeException was unhandled.
我没有更改原始代码。有趣的是我两年前下载的相同代码并且运行良好(在 Windows 7,现在我在 Windows 10)。
bytesFrom
的长度为 10025 字节。理论上的 clientSocket.ReceiveBufferSize
可能会变得比这个尺寸长(可能是由于 Window Auto-Tuning feature)。要解决此问题,请使用 clientSocket.ReceiveBufferSize
:
初始化缓冲区
byte[] bytesFrom = new byte[clientSocket.ReceiveBufferSize];
另请注意,在客户端代码中,您在 getMessage()
中遇到了类似的问题。您还应该更改缓冲区初始化代码:
buffSize = clientSocket.ReceiveBufferSize;
byte[] inStream = new byte[buffSize];
serverStream.Read(inStream, 0, buffSize);
我正在使用本教程来了解它是如何工作的: http://csharp.net-informations.com/communications/csharp-chat-server-programming.htm
(http://csharp.net-informations.com/communications/csharp-chat-client.htm)
这是我所做的:
- 下载代码
启动了两个 Visual Studio 实例:一个用于客户端,一个用于服务器端。
运行服务器:服务器运行很好
运行 客户端,在文本框中输入名称,按下连接按钮,这就是我在服务器程序的这一行中得到的结果:
networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
ArgumentOutOfRangeException was unhandled.
我没有更改原始代码。有趣的是我两年前下载的相同代码并且运行良好(在 Windows 7,现在我在 Windows 10)。
bytesFrom
的长度为 10025 字节。理论上的 clientSocket.ReceiveBufferSize
可能会变得比这个尺寸长(可能是由于 Window Auto-Tuning feature)。要解决此问题,请使用 clientSocket.ReceiveBufferSize
:
byte[] bytesFrom = new byte[clientSocket.ReceiveBufferSize];
另请注意,在客户端代码中,您在 getMessage()
中遇到了类似的问题。您还应该更改缓冲区初始化代码:
buffSize = clientSocket.ReceiveBufferSize;
byte[] inStream = new byte[buffSize];
serverStream.Read(inStream, 0, buffSize);