甜羊羊 2022-04-26 17:16 采纳率: 87.5%
浏览 46
已结题

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

  • 写回答

1条回答 默认 最新

  • 大米粥哥哥 2022-04-26 20:17
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月4日
  • 已采纳回答 4月26日
  • 创建了问题 4月26日

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题