【发布时间】:2021-02-07 21:27:13
【问题描述】:
从我的客户端,我正在向服务器发送一个变量大小的整数,当我在服务器上得到它时,它的数据格式与我需要的不同,我该如何解码它?
发送时的客户端代码
Socket s = new Socket();
s.connect(new InetSocketAddress(voids[1], 7800), 2000);
DataOutputStream writer = new DataOutputStream(s.getOutputStream());
data.remove("ObjectStream");
writer.write(9); // used 9 for testing
writer.flush();
用于接收的服务器端
amt = client.recv(self.SIZE) # size is 1024
amt = amt.decode() # where it should have decode and get 9
在服务器端接收到值的整数值:
- 1 -> b'\01'
- 2 -> b'\02'
- 3 -> b'\03'
- 8 -> b'\08'
- 9 -> b'\t'
- 10 -> b'\n'
【问题讨论】:
-
A
DataOutputStream使用非常特定的序列化协议(类似于 XDR)。您确定不想使用普通的OutputStream。但是,您显示的输出不会仅由该代码产生。请提供minimal reproducible example。 -
在
DataOutputStream上仅调用write(9)只会产生字节9,仅此而已。所以要么这不是java.io.DataOutputStream,要么你在write(9)之前和之后写了更多的数据。您可能还想指定您实际期望的结果。 -
您是否对 9 到
b'\t'的映射感到困惑?那是因为字节9是制表符(或\t),字节10是换行符(\n),等等 -
@MarkRotteveel 哦,那我该怎么做才能发送 9 而不是 tab 值?
-
发送 9 作为字节时,与制表符无法区分。 Python 恰好将其显示为
b'\t'。如果你解释你的期望可能会更好。也许您想发送 字符 '9',而不是字节 9?