C# C错误与在线聊天室

C# C错误与在线聊天室,c#,server,client,C#,Server,Client,所以我用C语言创建了一个在线聊天室,我在第71行发现了这个错误 System.ArgumentOutOfRangeException:'指定的参数超出有效值的范围。' 我有一个客户端程序和一个服务器程序。下面是客户端程序的代码。给出错误的那行是用星号表示的 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using

所以我用C语言创建了一个在线聊天室,我在第71行发现了这个错误

System.ArgumentOutOfRangeException:'指定的参数超出有效值的范围。'

我有一个客户端程序和一个服务器程序。下面是客户端程序的代码。给出错误的那行是用星号表示的

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Net.Sockets;
    using System.Threading;

    namespace ChatProgram
    {
    public partial class Form1 : Form
    {
    System.Net.Sockets.TcpClient clientSocket = new 
    System.Net.Sockets.TcpClient();
    NetworkStream serverStream = default(NetworkStream);
    string readData = null;

    static int maxUsage = 0;
    string noName = "Anonymous";
    int tick = 0;

    public Form1()
    {
        InitializeComponent();
    }

    private void enterButton_Click(object sender, EventArgs e)
    {
        byte[] outStream = System.Text.Encoding.ASCII.GetBytes(readRichTxt.Text + "$");
        serverStream.Write(outStream, 0, outStream.Length);
        serverStream.Flush();

        readData = "Connected to server...";
        msg();
        clientSocket.Connect("127.0.0.1", 8888);
        serverStream = clientSocket.GetStream();

        Thread ctThread = new Thread(getMessage);
        ctThread.Start();

        string nameTxt = nameTextBox.Text;
        if (nameTxt == String.Empty)
        {
            nameTxt = noName;
            tick = 1;
        }
        else
        {
            tick = 0;
        }
        readRichTxt.SelectionColor = Color.Red;
        readRichTxt.AppendText("\n" + nameTxt + " has joined." + "\n");
        ++maxUsage;
        sendButton.Enabled = true;

        if (maxUsage == 3)
        {
            enterButton.Enabled = false;
        }
    }

    private void getMessage()
    {
        while(true)
        {
            serverStream = clientSocket.GetStream();
            int buffSize = 0;
            byte[] inStream = new byte[10025];
            buffSize = clientSocket.ReceiveBufferSize;
            ***serverStream.Read(inStream, 0, buffSize);***
            string returndata = System.Text.Encoding.ASCII.GetString(inStream);
            readData = "" + returndata;
            msg();
        }
    }

    private void msg()
    {
        if (this.InvokeRequired)
            this.Invoke(new MethodInvoker(msg));
        else
            readRichTxt.Text = readRichTxt.Text + Environment.NewLine + " >> " + readData;
    }

    private void sendButton_Click(object sender, EventArgs e)
    {
        string nameTxt = nameTextBox.Text;
        string userTyped = userTypeBox.Text;

        if (userTyped == String.Empty)
        {
            return;
        }
        if (tick == 1)
        {
            readRichTxt.AppendText(noName + ": " + userTyped);
        }
        else
        {
            readRichTxt.AppendText(nameTxt + ": " + userTyped);
        }
        userTypeBox.Clear();
    }
}
}
请帮帮我,我在这一点上完全被难住了。

有多大:

buffSize = clientSocket.ReceiveBufferSize;
?

这可能比您在此声明的要大:

byte[] inStream = new byte[10025];
因此,错误大致告诉你:

buffSize > inStream.Length

这会导致超出范围的错误。

错误在哪一行?您将inStream声明为10025字节的数组。您尝试读取的流可能大于此值,从而导致超出范围异常。相反,在获得缓冲区长度后,尝试将其声明为新字节[buffSize]。