有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

sockets java。木卫一。StreamCorruptedException:流标头无效

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

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

  wr.write(hexStringToByteArray(messageBody));

wr.flush(); 

以上是成功发送数据。 1) 但是当我试着用

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

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

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

我不知道为什么?我知道我将接收的值将采用十六进制格式,即 假设600185和600186一样

谁能帮我克服这个错误

2)如果在一定时间后没有收到任何响应,如何关闭socket连接

提前谢谢大家


共 (1) 个答案

  1. # 1 楼答案

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