C# NetworkStream.Read()不';t工作并抛出ArgumentOutOfRangeException

C# NetworkStream.Read()不';t工作并抛出ArgumentOutOfRangeException,c#,sockets,tcp,client-server,chat,C#,Sockets,Tcp,Client Server,Chat,只是尝试创建一个聊天服务器客户端 这是正在等待客户端连接的服务器(可选)* 然后,客户端连接到服务器(可选)* 然后,在客户端,我从windows窗体发送消息,按钮单击事件执行以下操作: NetworkStream serverStream = clientSocket.GetStream(); byte[] outStream = System.Text.Encoding.ASCII.GetBytes(textBox2.Text + "$"); serverStream.Write(out

只是尝试创建一个聊天服务器客户端

  • 这是正在等待客户端连接的服务器(可选)*

  • 然后,客户端连接到服务器(可选)*

  • 然后,在客户端,我从windows窗体发送消息,按钮单击事件执行以下操作:

    NetworkStream serverStream = clientSocket.GetStream();
    byte[] outStream = System.Text.Encoding.ASCII.GetBytes(textBox2.Text + "$");
    serverStream.Write(outStream, 0, outStream.Length);
    serverStream.Flush();
    //this goes to the server  ------> to the part (4)
    
    //returning from the server <------
    byte[] inStream = new byte[10025];
    serverStream.Read(inStream, 0, (int)clientSocket.ReceiveBufferSize);
    string returndata = System.Text.Encoding.ASCII.GetString(inStream);
    textBox2.Text = "";
    textBox2.Focus();
    
  • 我一步一步地(在服务器和客户机上)调试,直到找到networkStream.Read()方法并抛出ArgumentOutOfRangeException,一切都很好。。。请任何人帮助我或告诉我错误在哪里

    *我说可选是因为1。二,。步骤很好(至少,我认为)

    从ArgumentOutOfRangeException可以看出,偏移量或计数是负数(第2个和第3个参数),或者“size(count)”参数大于缓冲区长度减去“offset”参数的值

    我会尝试从.Length传递
    字节,而不是从.Length传递
    clientSocket。ReceiveBufferSize

    参数,OutOfRangeException表示偏移量或计数为负(第二个和第三个参数),或者“size(count)”参数大于缓冲区长度减去“offset”参数的值


    我会尝试将
    bytesFrom.Length
    传递给
    clientSocket.ReceiveBufferSize

    而不是
    clientSocket.ReceiveBufferSize
    传递给
    networkStream.Read
    clientSocket.ReceiveBufferSize
    的值是多少?应该传递
    bytesFrom.Length
    而不是
    clientSocket.ReceiveBufferSize
    networkStream.Read
    clientSocket.ReceiveBufferSize
    的值是多少?
        System.Net.Sockets.TcpClient clientSocket = new System.Net.Sockets.TcpClient();
        clientSocket.Connect("127.0.0.1", 8888);
    
    NetworkStream serverStream = clientSocket.GetStream();
    byte[] outStream = System.Text.Encoding.ASCII.GetBytes(textBox2.Text + "$");
    serverStream.Write(outStream, 0, outStream.Length);
    serverStream.Flush();
    //this goes to the server  ------> to the part (4)
    
    //returning from the server <------
    byte[] inStream = new byte[10025];
    serverStream.Read(inStream, 0, (int)clientSocket.ReceiveBufferSize);
    string returndata = System.Text.Encoding.ASCII.GetString(inStream);
    textBox2.Text = "";
    textBox2.Focus();
    
    while ((true))
        {
            try
            {
                requestCount = requestCount + 1;
                NetworkStream networkStream = clientSocket.GetStream();
                byte[] bytesFrom = new byte[10025];
                if (networkStream.DataAvailable)
                {
                    **networkStream.Read(bytesFrom, 0, (int) clientSocket.ReceiveBufferSize);**
                    string dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom);
                    dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"));
                    Console.WriteLine(" >> Data from client - " + dataFromClient);
                    string serverResponse = "Last Message from client" + dataFromClient;
                    Byte[] sendBytes = Encoding.ASCII.GetBytes(serverResponse);
                    networkStream.Write(sendBytes, 0, sendBytes.Length);
                    networkStream.Flush();
                    Console.WriteLine(" >> " + serverResponse);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }