我正在使用 Java 套接字程序将整数和字符从服务器写回客户端
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
我想在线上写入一个int32和一个8B的char。对于我写时的整数
out.printf("%04x",1);
它在wireshark上显示为“30 30 30 31”,而我希望它显示为“01 00 00 00”。同样对于 out.printf("%d",1);它显示为“31”,而我想要它“01 00 00 00”。如何在导线上写入4B的整数和8B的字符?表示与编码有关吗?
最佳答案
使用 PrintWrite 将文本写入套接字并不理想,因为它会隐藏任何错误。
在你的情况下,你似乎想写入二进制文件,所以我建议你尝试一下。
DataOutputStream out = new DataOutputStream(
new BufferedOutputStream(clientSocket.getOutputStream()));
out.writeInt(1);
但是,如果你想起诉小端格式,我会使用阻塞 NIO。
SocketChannel sc =
ByteBuffer bb= ByteBuffer.allocateDirect(1024).order(ByteOrder.LITTLE_ENDIAN);
bb.putInt(1);
// put whatever else
bb.flip();
while(bb.remaining() > 0) sc.write(bb);
关于Java Socket 编写器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11865208/