C#中Socket通讯,接收到的string为什么前后几次相加起来了?

在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试了一下,也是一样结果。
请问这是什么原因?应该如何改进?

粘包了... 很难避免
具体可以百度粘包和拆包