java.io.StreamCorruptedException:無效的流頭

java.io.StreamCorruptedException: invalid stream header
投票:2回答:1

我正在編寫一個套接字客戶端,其中我正在向服務器發送數據(使用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)同樣,如果在一定時間後仍未收到任何響應,如何關閉套接字連接。

預先謝謝大家。

tags:java,sockets
1回答
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);
}

©2020 sofbug.com - All rights reserved.