Java Socket 编写器

标签 java sockets

我正在使用 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/

相关文章:

ruby - 如何处理ZeroMQ + Ruby中的线程问题?

java - 磁盘上的spring代码配置addResourceLocations

java - 在 java 中重用 PrepareStatement 中的参数

c - UDP 单播 : two processes listening on same udp port; only one receiving packets

c - WSAAsyncSelect/Event 上的 FD_WRITE 处理?

c - 选择在 Linux 上超时之前返回的调用

java - clearRect 绘制黑色而不是透明

java - 如何从服务器端 Controller 返回或调用签名的小程序的方法?

Java/clojure : Multiple character delimiter, 并保留分隔符

C socket 麻烦