1

我正在做一个多线程的服务器-客户端项目。在我的项目中,服务器正在接收来自客户端的连接请求,并提供一个线程来处理读取和发送数据。但是在读取数据时,它在第 61 行给出了一个异常。

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

例外是:

 >> System.ArgumentOutOfRangeException: Specified argument was out of the range
of valid values.
Parameter name: size
   at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 s
ize)
   at Server.handleClinet.doChat() in C:\Users\Mamun\documents\visual studio 201
0\Projects\Server\Server\Program.cs:line 62

我在这里上传了我的项目: http ://www.mediafire.com/?z2z5moqn8zdl6pt

我正在使用这些代码参考: http ://csharp.net-informations.com/communications/csharp-multi-threaded-server-socket.htm

http://csharp.net-informations.com/communications/csharp-multi-threaded-client-socket.htm

请查看我的项目并告诉我出了什么问题。提前致谢。

4

1 回答 1

0

根据MSDN,如果出现以下情况,可能会发生错误:

尺寸参数小于 0。

-或者-

size参数大于buffer的长度减去offset参数的值。

我还没有看到你的代码,但我猜它是关于2nd case的。在MSDN的示例中,他们只是使用缓冲区本身的长度作为size值:

byte[] myReadBuffer = new byte[1024];
int numberOfBytesRead = 0;

do
{
  numberOfBytesRead = myNetworkStream.Read(myReadBuffer, 0, myReadBuffer.Length);
    
  //..
}
while(myNetworkStream.DataAvailable);
于 2012-12-11T08:06:29.520 回答