请教大家JAVA——socket接收的数据(byte[])的处理
发布网友
发布时间:2022-04-22 06:22
我来回答
共4个回答
热心网友
时间:2023-07-09 23:29
接收方法的问题
如果你发送一个长度11的字符串 而用一个长度为8的数组接收
第一次read没问题 但第二次read时因为只接受了3个字符 而数组长度却是8.结果就是除了前3个字符外剩下全部都是0 就出现了你的问题。
byte[] b = {0x11,0x22,0x33, 0x00, 0x00, 0x00, 0x00...}; -->length = 1024 后面都是0x00
就是因为只接受了前3个字符 后边数组实例的时候本身就是0
解决方法也比较容易
read(byte[] b)方法提供了一个返回的整数用来表示接受了多少个字符。
只要每次read时判断下看看返回的数值和数组长度大小。如果接收小于数组长度在处理处理数据时把多余的数据去掉。
热心网友
时间:2023-07-09 23:29
String msg = in.readLine();//程序到此就停止不运行了
表示你的socket没有接收到数据。
你的socket没有抛出异常吗?
如果没有异常就用C端多发几次
sc = (SocketConnection) Connector.open("socket://localhost:"+PORT);
si.setText("Connected to server");
dis = sc.openDataInputStream();
dos = sc.openDataOutputStream();
这样试试
也有可能是数据的问题
热心网友
时间:2023-07-09 23:30
这种情况下一般需要服务器端传过来的数据先约定好数据包的长度和其他的规则,然后你在客户端按约定好的规则截取,这样就不会取到脏数据了
热心网友
时间:2023-07-09 23:30
应该约定规范,有报文头,指定包总长等信息。