java.io.StreamCorruptedException:无效的流标头

2024-01-05

我正在编写一个套接字客户端,其中我将数据发送到服务器(使用 getOutputStream()),下面是我的代码

 this.wr = this.socket.getOutputStream();

  wr.write(hexStringToByteArray(messageBody));

wr.flush(); 

以上就可以成功发送数据了。 1)但是当我尝试使用以下命令读取响应时

this.in = new ObjectInputStream(this.socket.getInputStream());

因为我不知道服务器返回的格式是什么。在这一行出现错误

“java.io.StreamCorruptedException:无效的流标头”。

我不知道为什么?我知道我将收到的值将采用十六进制格式,即 说 600185 就相当于 60 01 86 ....

谁能帮助我克服这个错误。

2)另外,如果我在一定时间后没有收到任何响应,如何关闭套接字连接。

提前感谢大家。


ObjectInputStream 需要一个由 ObjectOutputStream 写入的流中的标头。因此,如果您使用其中之一,则需要同时使用两者。

由于您的示例实际上并不需要 ObjectOutputStream,因此您可能只想不使用 ObjectInputStream。

就像是:

public void doWrite(Socket socket, String messageBody) {
    DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
    byte[] data = hexStringToByteArray(messageBody);

    dos.writeInt(data.length);
    dos.write(data);
    dos.flush();
}

public String doRead(Socket socket) throws IOException {
    DataInputStream dis = new DataInputStream(socket.getInputStream());
    int len = dis.readInt();
    byte[] data = new byte[len];

    dis.read(data);

    return byteArrayToHexString(data);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java.io.StreamCorruptedException:无效的流标头 的相关文章

随机推荐