跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • [Socket 小白求助]socket read 服务器返回 unknown length
未分類
25 1 月 2021

[Socket 小白求助]socket read 服务器返回 unknown length

[Socket 小白求助]socket read 服务器返回 unknown length

資深大佬 : haosamax 2

以前基本不写 Socket,都是调包侠。现在这个项目 socket 通讯,约定前六位是后面数据包长度(不够左补 0),后面是数据包,像这样:000length|xxxxxxxxxxxxxxxxxxxxx,求教,socket.read 怎么读,我是先读 6 位,算出 length,再读 length 吗?

大佬有話說 (14)

  • 資深大佬 : Edsie

    char[6]读取前 6 个,解析出 length,再读后面的

  • 主 資深大佬 : haosamax

    @Edsie send 的时候要发送两次吗,第一次发送,读 length,第二次发送读后面的

  • 資深大佬 : ScepterZ

    @haosamax 发送随便怎么发都行,反正是流

  • 主 資深大佬 : haosamax

    @ScepterZ 这个后面 xxx 部分是 json 字符串比较烦,其他的都是传的 k-v,我们约定只对 v 编码传输,指定长度、填充字符、填充位置,这样我可以 read(b),b 可以指定已知长度根据接口文档。像这种不知道长度的比如 json,或者 xxx 含有循环体,我看别人写的都是创建两个 socket,发送两次,第一次获取 length,第二次获取读后面的,两次建立连接,这不影响性能吗

  • 資深大佬 : LGA1150

    @Edsie 一个 char 占两字节

  • 資深大佬 : Kamiyu0087

    先问问前六位表示数据包长度指的是 6 个 bit 还是 6 个 byte?
    如果是 byte,很好奇要传啥数据需要定那么大的长度?
    如果是 bit,那第一个字节的最后两个 bit 是空置还是直接跟上后续数据包的数据?

  • 資深大佬 : zlwen

    用 netty

  • 主 資深大佬 : haosamax

    @Kamiyu0087 6byte 。十进制的,最多 byte[999999],还行吧
    @zlwen 计划下个版本就接入 netty

  • 主 資深大佬 : haosamax

    @haosamax 这个半吊子自定义协议,循环体处理就这

  • 資深大佬 : Kamiyu0087

    @haosamax 那 3 个字节就够了啊,为啥要 6 个字节
    不会是每个字节就 0 ~ 9,然后转字符串拼接吧? – -!

  • 主 資深大佬 : haosamax

    @Kamiyu0087 sry,我搞错了,是 6 个字节,不是 999999…。为什么这么大,我也不知道,平台约定的

  • 主 資深大佬 : haosamax

    @Kamiyu0087 还是指定长度 6 位的字符串拉

  • 資深大佬 : LGA1150

    #11 #12 长度到底是 ASCII 还是二进制?
    如果是 ASCII,读到 byte[]里,转 String 再转 int
    byte[] buf = new byte[6];
    inputStream.read(buf);
    int length = Integer.parseInt(new String(buf));
    如果是二进制,读到 byte[]里,转 BigInteger 再转 long
    byte[] buf = new byte[7]; // 多分配一个字节保证转换为正数
    inputStream.read(buf, 1, 6);
    long length = new BigInteger(buf).longValue();

  • 資深大佬 : Edsie

    盲猜是六个字符,最好确认一下

    send 的时候也不需要发两次,基于流的 IO 没道理发两次。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具