当前位置:编程学习 > JAVA >>

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相关
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,