标签:
(1)双方约定每次发送报文都报文前几个字符表示长度信息,如下
原始报文是:ASDF
发送的socket报文是:0004ASDF
其中0004表示报文长度,接收方先接收四位的长度,再接收余下的报文。
(2)双方约定一个特殊的标志是结束符,比如约定 ==END== 表示结束
代码修改为while(!"==END==".equals(line = in.readLine()))就继续等待接收
这个特殊的结束符需要双方发送报文结束必须再发送的。
第一种解决方法是最常用的。自己接触的几个项目都是此种方式。
附加第一种方法的用法:
1、得到长度
byte[] head= new byte[5];// 双方约定前五位表示报文长度 in.read(msgHead, 0, head.length);// 首先读取报文长度信息 String headLength= new String(head, getEncoding()); int headLength= Integer.parseInt(headLength);
byte[] msgBody = new byte[msgLengthInt];// new一个报文长度大小的字节数组 in.read(msgBody, 0, msgBody.length);// 读取报文信息 byte[] recMsg = new byte[msgHead.length + msgBody.length];// 如有需要合并报文长度和报文信息 System.arraycopy(msgHead, 0, recMsg, 0, msgHead.length); System.arraycopy(msgBody, 0, recMsg, msgHead.length, msgBody.length);
1
标签:
原文地址:http://www.cnblogs.com/zrui513/p/4937353.html