甜羊羊 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 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分