我正在做一个多线程服务器 - 客户端项目。在我的项目服务器中,从客户端接收连接请求,并提供一个线程来处理读取和发送数据。但是在阅读数据时,它在第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
请看我的项目并告诉我出了什么问题。提前谢谢。
答案 0 :(得分:0)
根据MSDN,如果出现错误,可能会发生错误:
size参数小于0.
-OR -
size参数大于缓冲区的长度减去偏移量参数的值。
我没有看到你的代码,但会猜测它是关于第二种情况。
在MSDN的示例中,他们只使用缓冲区本身的长度作为size
值:
byte[] myReadBuffer = new byte[1024];
int numberOfBytesRead = 0;
do
{
numberOfBytesRead = myNetworkStream.Read(myReadBuffer, 0, myReadBuffer.Length);
//..
}
while(myNetworkStream.DataAvailable);