从clientsocket读取:ArgumentOutOfRangeException未处理

时间:2017-05-15 09:21:59

标签: c# sockets exception tcpclient

我正在使用本教程来了解它是如何工作的: http://csharp.net-informations.com/communications/csharp-chat-server-programming.htm

http://csharp.net-informations.com/communications/csharp-chat-client.htm

这就是我所做的:

  • 下载代码
  • 启动了两个Visual Studio实例:一个用于客户端,一个用于服务器端。

  • 跑出服务器:服务器正常运行

  • Ran Client Side,在文本框中输入名称,按下连接按钮,这就是我在服务器程序中的这一行:

    networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
    
  

ArgumentOutOfRangeException未处理。

我没有更改原始代码。有趣的是,我在两年前下载的代码相同,并且工作正常(在Windows 7上,现在我在Windows 10上)。

1 个答案:

答案 0 :(得分:0)

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);