我正在编写一个套接字客户端,其中我将数据发送到服务器(使用 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(使用前将#替换为@)