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未満です。

-また-

サイズパラメータは、バッファの長さからオフセットパラメータの値を引いた値よりも大きくなります。

私はあなたのコードを見ていませんが、それは2番目のケースについてだと思います。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 に答える