EasySocket icon indicating copy to clipboard operation
EasySocket copied to clipboard

服务器返回的单次数据的大小已经超过了规定的最大值

Open 2318423730 opened this issue 6 years ago • 15 comments

2318423730 avatar Jan 02 '20 07:01 2318423730

之前低版本都正常,换成高版本出现这个问题

2318423730 avatar Jan 02 '20 07:01 2318423730

你看一下跟字节的大小端模式有没有关系,框架的字节顺序默认是大端模式,如果服务器用的是小端模式,则会出现这种问题,客户端和服务器的字节存储顺序要相同,你可以在EasySocketOptions的setWriteOrder和setReadOrder设置大小端模式

jiusetian avatar Jan 02 '20 13:01 jiusetian

设置之后还是这个问题

2318423730 avatar Jan 03 '20 06:01 2318423730

DefaultReaderProtocol需要改吗

2318423730 avatar Jan 03 '20 06:01 2318423730

你用的是1.56版本吗,消息的数据结构默认是包头(4个字节)+包体,包头一个int用来保存包体的数据长度,你发送消息的数据结构没有问题

jiusetian avatar Jan 03 '20 06:01 jiusetian

你切换为低版本就没有问题吗,然后高版本就有问题是吗

jiusetian avatar Jan 03 '20 06:01 jiusetian

低版本可能不是你这个框架。因为之前别人写的,名字一样,但是只有一个文件。 我自己再找找问题吧

2318423730 avatar Jan 03 '20 06:01 2318423730

嗯嗯, 那可能是数据格式不匹配

jiusetian avatar Jan 03 '20 06:01 jiusetian

如果tcp回复的数据没有固定格式,怎么处理呢

2318423730 avatar Jan 06 '20 04:01 2318423730

没有固定格式怎么处理分包和粘包的问题

jiusetian avatar Jan 06 '20 04:01 jiusetian

分包和粘包暂时不考虑。返回的东西确实没有固定格式的包头

2318423730 avatar Jan 06 '20 04:01 2318423730

返回16进制类型大概是0D0A4F4B0D0A或者0D0A53656E6420534D53204F4B0D0A0D0A4F4B0D0A或者FE320704 2C00020B31333838333536323536332C00200C3230313930363234313635302C00100230342C000806 9A8C8BC178010D0A0D0A0D0A4F4B0D0A

2318423730 avatar Jan 06 '20 04:01 2318423730

没办法知道包内容长度。有没有办法不去限定格式,把完整数据拿出来自己处理

2318423730 avatar Jan 06 '20 04:01 2318423730

那你就直接用socket输入流inputStream的read(byte b[])方法读到一个byte数组了,但是如果你这个数据是连续发送的很有可能就粘在一起,或者数据量很大有可能就分次才能读取完

jiusetian avatar Jan 06 '20 04:01 jiusetian

那你就直接用socket输入流inputStream的read(byte b[])方法读到一个byte数组了,但是如果你这个数据是连续发送的很有可能就粘在一起,或者数据量很大有可能就分次才能读取完

可以提供一个直接读留的接口吗,有些时候不太需要限制格式的。

irunmyway avatar Jun 25 '20 12:06 irunmyway