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

时间:2011-04-06 02:50:29

标签: java sockets

我正在编写一个套接字客户端,我将数据发送到服务器(使用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)如果我在一定时间后没有收到任何回复,如何关闭套接字连接。

提前感谢你们。

1 个答案:

答案 0 :(得分:5)

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);
}