C# C错误与在线聊天室
所以我用C语言创建了一个在线聊天室,我在第71行发现了这个错误 System.ArgumentOutOfRangeException:'指定的参数超出有效值的范围。' 我有一个客户端程序和一个服务器程序。下面是客户端程序的代码。给出错误的那行是用星号表示的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
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]。