gpt4 book ai didi

java - 从 Java 套接字服务器向 C 套接字客户端接收数据时出现问题

转载 作者:行者123 更新时间:2023-11-30 17:30:23 25 4
gpt4 key购买 nike

我的套接字客户端是用 C 编写的,并按以下格式发送值:

x00\x2C\x02\x00\xE0\x00

现在我想从用 Java 编写的 TCP/IP 套接字服务器读取十六进制值。

在 Java Socket 中读取流值应该采用什么方法?

我尝试按以下方式阅读,但不起作用:

InputStream ins = sock.getInputStream();
int byteRead;

while((byteRead = ins.read()) != -1) {
System.out.println(Integer.toHexString(byteRead & 0xFF));
}

最佳答案

首先要说明的是,“\x41”是一个字节,十六进制 41 又名 ASCII 'A'。 C 字符串后面还有一个终止符 \x00。所以你正在写

\x00\x2C\x02\x00\xE0\x00

作为大小为 6 的 char 数组。将其写入字符串将写入一个空字符串,因为第一个字节是 \x00

在java端,\x00没有问题,它只是一个常规的字节/字符。

java代码没问题。一个变体可能是:

try (InputStream ins = new BufferedInputStream(sock.getInputStream())) {
int byteRead;
while ((byteRead = ins.read()) != -1) {
System.out.printf("%02X%n", byteRead & 0xFF);
}
} // Closes

这里大写的 X 表示大写的十六进制,%n 表​​示换行符。 String.format 将是替代方案。

我的第一个猜测是,C 编写是错误地使用 puts、使用 strlen 等完成的。

关于java - 从 Java 套接字服务器向 C 套接字客户端接收数据时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25156904/

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