在C#中利用Socket传输数据时,发送端是动作触发后发送数据,接收端是用while(true)反复循环接收。但是当发送端触发频率非常快时,接收到的数据string就串加起来了。
比如,我每触发一次,就发一个姓名和分号,比如:zhangsan;可是接收到的数据可能会变成:zhangsan;lisi;zhaowu;
//这是发送端代码
private void trackBar1_Scroll(object sender, EventArgs e)
{
textBox1.Text = trackBar1.Value.ToString();
string mesg = textBox1.Text + ";" ;
//richTextBox1.Text = mesg; //测试代码1
byte[] buffer = new byte[1024 * 1024];
buffer = Encoding.UTF8.GetBytes(mesg);
//richTextBox2.Text = Encoding.UTF8.GetString(buffer); //测试代码2
socketConnect.Send(buffer);
}
//这是接收端代码
void Receive()
{
while (true)
{
byte[] buffer = new byte[1024 * 1024];
int r = socketConnect.Receive(buffer);
mesg2 = Encoding.UTF8.GetString(buffer);
}
}
以上是代码,我加了测试代码1和测试代码2,这两个richtextbox显示的内容都是单个名字,不论trackBar1触发的多么高频。但是在接收端,mesg2就会在trackBar1触发的非常快时变成多个名字。
发送端是写在winform上,接收端是在Unity上写的脚本,我之前以为是这个原因。结果用全部在winform试了一下,也是一样结果。
请问这是什么原因?应该如何改进?