• 2018年全军院校招生计划下达:计划招收学员3.05万名 2019-06-15
  • 晋城市举办干部素质提升工程第十八期专题讲座 2019-06-15
  • 抖音广告出现对英烈邱少云不敬内容 今日头条致歉 2019-06-13
  • 超半数巴西民众对世界杯不感兴趣--旅游频道 2019-06-12
  • 外交部举行中外媒体吹风会:王毅介绍上合组织青岛峰会情况 2019-06-12
  • 2018网络中国节·端午 2019-06-04
  • 韩媒:韩美商定暂停原定8月“乙支自由卫士”联演 2019-06-03
  • 重庆市公安局交通管理局互联网交通安全服务管理平台 2019-06-03
  • 俄侦察船穿越英吉利海峡 英国急派军舰战机监视 2019-05-28
  • 网购陷阱多 女子花3000元买5套化妆品只有2套是真的 2019-05-28
  • 环保约谈濂溪区主要负责同志 谢一平要求立行立改真抓真改 2019-05-25
  • 官宣!广东签约北京3冠功勋 大莫助拳阿联未来可期 2019-05-25
  • 党建第一责任与发展第一要务相融合br全面提升机关党建工作水平 2019-05-22
  • 卡纳瓦罗:对比赛结果不满意 晋级机会各占一半 2019-05-22
  • 天津宣讲十九大:津沽大地舞春风,小康路上添豪情 2019-05-21
  • 南粤风彩36选7开奖洁果: 求助大神~unity+socket接收信息条数与发送不符

    11
    回复
    1399
    查看
    打印 上一主题 下一主题
    [ 复制链接 ]
    3偶尔光临
    295/300
    排名
    10960
    昨日变化

    福建36选7和值走势图 www.00-na.com 3

    主题

    44

    帖子

    295

    积分

    Rank: 3Rank: 3Rank: 3

    UID
    244970
    好友
    3
    蛮牛币
    53
    威望
    0
    注册时间
    2017-9-20
    在线时间
    154 小时
    最后登录
    2019-6-25
    10蛮牛币
    刚刚接触socket  今天写了一个简易的服务器端与客户端。
    当我的receive线程写成这样时:
    [C#] 纯文本查看 复制代码
    private void ReceiveMsg(object o)
        {
            try
            {
                Socket AcceptSocket = o as Socket;
                while (true)
                {               
                    AcceptSocket.Receive(buffer);
                    Debug.Log("收到消息:" + Encoding.UTF8.GetString(buffer));
                }
            }
            catch (Exception ex)
            {
                Debug.Log(ex.Message);
            }
    
        }




    接收到的消息是这样的



    可是当我的代码变成了这样:
    [C#] 纯文本查看 复制代码
    private void ReceiveMsg(object o)
        {
            try
            {
                Socket AcceptSocket = o as Socket;
                while (true)
                {
                    
    
                    if (AcceptSocket.Receive(buffer)!=0)
                    {
                        AcceptSocket.Receive(buffer);
                        Debug.Log("222收到消息:" + Encoding.UTF8.GetString(buffer));                 
                    }
                    else
                    {
                        Debug.Log(AcceptSocket.RemoteEndPoint + "客户端断开连接!");
                        clientSocketList.Remove(AcceptSocket);
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.Log(ex.Message);
            }
    
        }


    我认为是不影响debug内容的,结果输出却变成了这样:







    我应该怎么修改代码才能达到正常又简洁的效果呢?
    6蛮牛粉丝
    1427/1500
    排名
    3110
    昨日变化

    5

    主题

    395

    帖子

    1427

    积分

    Rank: 6Rank: 6Rank: 6

    UID
    234410
    好友
    4
    蛮牛币
    1781
    威望
    0
    注册时间
    2017-7-26
    在线时间
    537 小时
    最后登录
    2019-6-27
    沙发
    2019-3-4 15:42:00 只看该作者
    粘包问题你可以先忽略 几行代码而已
    AcceptSocket.Receive(buffer) 你调用了两次
    像这种问题 上网扒个 socket 的范例 网上一大堆 然后在修改着看

    点评

    万分感谢  发表于 2019-3-6 17:02
    7日久生情
    2386/5000
    排名
    664
    昨日变化

    1

    主题

    228

    帖子

    2386

    积分

    Rank: 7Rank: 7Rank: 7Rank: 7

    UID
    163577
    好友
    2
    蛮牛币
    2047
    威望
    0
    注册时间
    2016-8-22
    在线时间
    831 小时
    最后登录
    2019-6-6
    板凳
    2019-3-4 16:08:11 只看该作者
    你的客户端应该是直接用循环发送的信息把,第二个方案涉及到黏包的问题,你要在客户端和服务器做出相应的处理:一般都是每一条消息的前4位用来表示此条信息的长度,然后服务器收到消息,先读前4位信息,确定该信息有多长,然后往后读相应长度的字节,再解析就得出此条信息内容。知道收到的数据长度为0为止
    3偶尔光临
    295/300
    排名
    10960
    昨日变化

    3

    主题

    44

    帖子

    295

    积分

    Rank: 3Rank: 3Rank: 3

    UID
    244970
    好友
    3
    蛮牛币
    53
    威望
    0
    注册时间
    2017-9-20
    在线时间
    154 小时
    最后登录
    2019-6-25
    地板
    楼主 2019-3-4 16:16:09 只看该作者
    w20050830413 发表于 2019-3-4 16:08
    你的客户端应该是直接用循环发送的信息把,第二个方案涉及到黏包的问题,你要在客户端和服务器做出相应的处 ...

    发送端是这样写的:
    [C#] 纯文本查看 复制代码
    public  void AAA()
        {
            try
            {
                SendMes("第" + i + "条消息");
                i++;
    
            }
            catch (Exception ex)
            {
                Debug.Log(ex.Message);
            }
    
        }
    
        void SendMes(string ms)
        {
            byte[] data = new byte[1024];
            data = Encoding.UTF8.GetBytes(ms);
            clientSocket.Send(data);
            Debug.Log("已成功发送消息");
        }



    请问第一种方案为什么没有粘包而第二种有??不太了解这一块
    3偶尔光临
    295/300
    排名
    10960
    昨日变化

    3

    主题

    44

    帖子

    295

    积分

    Rank: 3Rank: 3Rank: 3

    UID
    244970
    好友
    3
    蛮牛币
    53
    威望
    0
    注册时间
    2017-9-20
    在线时间
    154 小时
    最后登录
    2019-6-25
    5#
    楼主 2019-3-4 16:17:15 只看该作者
    w20050830413 发表于 2019-3-4 16:08
    你的客户端应该是直接用循环发送的信息把,第二个方案涉及到黏包的问题,你要在客户端和服务器做出相应的处 ...

    发送端是这样写的:
    [C#] 纯文本查看 复制代码
    public  void AAA()
        {
            try
            {
                SendMes("第" + i + "条消息");
                i++;
    
            }
            catch (Exception ex)
            {
                Debug.Log(ex.Message);
            }
    
        }
    
        void SendMes(string ms)
        {
            byte[] data = new byte[1024];
            data = Encoding.UTF8.GetBytes(ms);
            clientSocket.Send(data);
            Debug.Log("已成功发送消息");
        }



    请问第一种方案为什么没有粘包而第二种有??不太了解这一块
    7日久生情
    2386/5000
    排名
    664
    昨日变化

    1

    主题

    228

    帖子

    2386

    积分

    Rank: 7Rank: 7Rank: 7Rank: 7

    UID
    163577
    好友
    2
    蛮牛币
    2047
    威望
    0
    注册时间
    2016-8-22
    在线时间
    831 小时
    最后登录
    2019-6-6
    6#
    2019-3-4 16:22:55 只看该作者
    你的第一种情况应该也是存在的,毕竟黏包是TCP协议里面为了节约性能而出现的一种情况,主要是由于发送的数据太频繁而且也不大,所以就自动随机组合打包了
    3偶尔光临
    295/300
    排名
    10960
    昨日变化

    3

    主题

    44

    帖子

    295

    积分

    Rank: 3Rank: 3Rank: 3

    UID
    244970
    好友
    3
    蛮牛币
    53
    威望
    0
    注册时间
    2017-9-20
    在线时间
    154 小时
    最后登录
    2019-6-25
    7#
    楼主 2019-3-4 17:15:27 只看该作者
    w20050830413 发表于 2019-3-4 16:22
    你的第一种情况应该也是存在的,毕竟黏包是TCP协议里面为了节约性能而出现的一种情况,主要是由于发送的数 ...

    如果是随机组合打包,应该不至于是接收到2,4,6.。。。并且每次都是收到这样的规律呢?
    5熟悉之中
    857/1000
    排名
    3988
    昨日变化

    1

    主题

    134

    帖子

    857

    积分

    Rank: 5Rank: 5

    UID
    246321
    好友
    0
    蛮牛币
    7138
    威望
    0
    注册时间
    2017-9-27
    在线时间
    348 小时
    最后登录
    2019-6-26
    8#
    2019-3-5 09:17:52 只看该作者
    本帖最后由 1320494699 于 2019-3-5 09:20 编辑



      




    1.png (18.11 KB, 下载次数: 13)

    1.png
    4四处流浪
    474/500
    排名
    5290
    昨日变化

    0

    主题

    49

    帖子

    474

    积分

    Rank: 4

    UID
    53850
    好友
    0
    蛮牛币
    9207
    威望
    0
    注册时间
    2014-11-7
    在线时间
    155 小时
    最后登录
    2019-5-24
    9#
    2019-3-5 11:44:09 只看该作者
    AcceptSocket.Receive(buffer) 你调了两次,只有第二次有打日志,所以打出来的都是双数次数
    3偶尔光临
    295/300
    排名
    10960
    昨日变化

    3

    主题

    44

    帖子

    295

    积分

    Rank: 3Rank: 3Rank: 3

    UID
    244970
    好友
    3
    蛮牛币
    53
    威望
    0
    注册时间
    2017-9-20
    在线时间
    154 小时
    最后登录
    2019-6-25
    10#
    楼主 2019-3-6 16:26:46 只看该作者
    a3a28 发表于 2019-3-5 11:44
    AcceptSocket.Receive(buffer) 你调了两次,只有第二次有打日志,所以打出来的都是双数次数 ...

    非常感谢!
    3偶尔光临
    295/300
    排名
    10960
    昨日变化

    3

    主题

    44

    帖子

    295

    积分

    Rank: 3Rank: 3Rank: 3

    UID
    244970
    好友
    3
    蛮牛币
    53
    威望
    0
    注册时间
    2017-9-20
    在线时间
    154 小时
    最后登录
    2019-6-25
    11#
    楼主 2019-3-6 16:56:16 只看该作者
    您需要登录后才可以回帖 登录 | 注册帐号

    本版积分规则

  • 2018年全军院校招生计划下达:计划招收学员3.05万名 2019-06-15
  • 晋城市举办干部素质提升工程第十八期专题讲座 2019-06-15
  • 抖音广告出现对英烈邱少云不敬内容 今日头条致歉 2019-06-13
  • 超半数巴西民众对世界杯不感兴趣--旅游频道 2019-06-12
  • 外交部举行中外媒体吹风会:王毅介绍上合组织青岛峰会情况 2019-06-12
  • 2018网络中国节·端午 2019-06-04
  • 韩媒:韩美商定暂停原定8月“乙支自由卫士”联演 2019-06-03
  • 重庆市公安局交通管理局互联网交通安全服务管理平台 2019-06-03
  • 俄侦察船穿越英吉利海峡 英国急派军舰战机监视 2019-05-28
  • 网购陷阱多 女子花3000元买5套化妆品只有2套是真的 2019-05-28
  • 环保约谈濂溪区主要负责同志 谢一平要求立行立改真抓真改 2019-05-25
  • 官宣!广东签约北京3冠功勋 大莫助拳阿联未来可期 2019-05-25
  • 党建第一责任与发展第一要务相融合br全面提升机关党建工作水平 2019-05-22
  • 卡纳瓦罗:对比赛结果不满意 晋级机会各占一半 2019-05-22
  • 天津宣讲十九大:津沽大地舞春风,小康路上添豪情 2019-05-21
  • 福建快3开奖号码昨天 北京pk10输了了20万 广西快三今天的推荐号码 世界各国彩票中奖号码 国内新闻奖奖金 nba比分排名 曾道人五码中特官方网 河南泳坛夺金283玩法 p3试机号查询近10期 淘宝快3多少人玩 下载上海快三软件 怎么会有极速时时彩 龙江体彩61开奖结果 广东11选5精准一中一 wnba直播