Socket 客户端与服务端接收值的问题
客户端:outputStream = socket.getOutputStream();
baos = new ByteArrayOutputStream();
String message = new String("1.0,1.0,lilin>login>000000");
byte[] buffer = new byte[1200];
int len = SocketClient.Fill(buffer, 0, message);
byte[] data = new byte[len];
System.arraycopy(buffer, 0, data, 0, len);
if (len != -1) {
outputStream.write(data);
outputStream.flush();
start = System.currentTimeMillis();
}
public static int Fill(byte[] buff, int startindex, String strs) {
byte[] bs = new byte[strs.length() * 2 + 2];
try {
// 长度不够了
if (buff.length < bs.length + startindex) {
return -1;
}
for (int k = 0; k < strs.length(); k++) {
bs[k * 2] = (byte) (strs.charAt(k) >> 8);
bs[k * 2 + 1] = (byte) (strs.charAt(k));
}
bs[bs.length - 2] = 0;
bs[bs.length - 1] = 0;
// 拷贝数组
System.arraycopy(bs, 0, buff, startindex, bs.length);
} catch (Exception e) {
return -1;
}
return bs.length;
}
服务端:
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buffer = new byte[2];
while (true) {
if (is != null) {
if ((rlen = is.read(buffer)) != -1) {// 每次循环读两个字节
if (buffer[0] == 0 && buffer[1] == 0) {
// 提交一个命令
byte[] read = bos.toByteArray();
bos = new ByteArrayOutputStream();
if (read.length != 0) {
lastTime = System.currentTimeMillis();
lastTimeMap.put(sct, lastTime);
Thread t = new Thread(new ThreadSend(read,read.length));
t.start();
}
} else {
// 缓存数据
bos.write(buffer);
}
}
}
}
以上是我服务端接收数据的代码, 客户端是将字符串进行字节数组填充传的。
当客户端出现错误时, 服务端接收的数据会乱
本身需要接收的命令为 1.0,1.0,lilin>login>000000
当客户端出现错误时, 服务端接收的数据格式为 110,ili>oi>000
谁能帮我解答下这是个嘛问题引起的 客户端不出错误就不会影响
但是服务端出错的情况下 客户端不会出现接收的数据格式不对 socket
补充:Java , Java相关