gpt4 book ai didi

java - 通过套接字的整数 - 错误字节

转载 作者:太空宇宙 更新时间:2023-11-04 14:02:48 25 4
gpt4 key购买 nike

我正在将一个整数从 PC 上运行的 Tcl 脚本发送到 Android 上运行的 Java 应用程序。

Tcl 代码:

set bytes 10
set sock [socket localhost $port]
set binLen [binary format i $bytes]
puts "Sending size: $bytes"
puts $sock $binLen
flush $sock
close $sock

在Android端读取它的Java代码:

Socket clientSocket = ...; // socket created for connected Tcl script
InputStream inputStream = clientSocket.getInputStream();
DataInputStream dataInputStream = new DataInputStream(inputStream);
byte[] sizeBuffer = new byte[4];
dataInputStream.readFully(sizeBuffer);

现在,当我在调试中预览 sizeBuffer 时,我看到它是:

sizeBuffer = {byte[4]@830050199072}
[0] = 13
[1] = 10
[2] = 0
[3] = 0

这似乎不太正确。信中我想将其转换回整数:

int size = ByteBuffer.wrap(sizeBuffer).order(ByteOrder.LITTLE_ENDIAN).getInt();

但它给出的是 2573,而不是 10,根据接收到的字节,这是显而易见的。

我做错了什么?

最佳答案

您遇到的主要问题是 puts 默认情况下附加换行符序列(因为它的第一项工作是写出文本供人们阅读)。您的平台的默认换行符顺序是回车/换行符。编写二进制时,您应该做两件事:将 channel 置于二进制模式,并且不要编写额外的行终止符。

# Put the channel in binary mode
fconfigure $sock -translation binary
# Write without extra bytes
puts -nonewline $sock $binLen

关于java - 通过套接字的整数 - 错误字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29155287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com