gpt4 book ai didi

java - C99 客户端与 Java 服务器通信

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

我正在尝试让 C99 客户端与 Java 服务器通信。然而,Java 服务器接收到的数据与传输的数据不同。 (即@x�@Ófl/ú.��@¨����������������Û¢ÁBp‘ˇ¡`Ôfl/)

我曾考虑过这是一个编码问题,但我遇到了困难。我已经尝试测试这两个程序以得出结论,Java 服务器能够与 Java 客户端通信,而 C 客户端能够与 C 服务器通信。

但是我无法让 Java 服务器与 C 客户端通信。

Java代码:

serverSocket = new ServerSocket(port);  
Socket sock = serverSocket.accept();

BufferedReader in = new BufferedReader(new InputStreamReader(sock.getInputStream()));

String inputString = in.readLine();
System.out.println(inputString);

C 代码:

struct sockaddr_in sin;
struct hostent *host;

host = gethostbyname(hostname);

bzero(&(sin.sin_zero),8);
sin.sin_port = htons(port);
sin.sin_addr = *((struct in_addr *)host->h_addr);
sin.sin_family = AF_INET;

sock = socket(AF_INET, SOCK_STREAM, 0);

if(connect(sock, (struct sockaddr *)&sin,sizeof(struct sockaddr_in)) == -1)

...

send(sock, &message, strlen(message)+1, 0);

编辑:我试过在两个主机之间发送“TEST”这个词,但没有成功。

已修复:当我传递消息变量时,我在消息变量前面有一个 & 符号。

应该是:

send(sock, message, strlen(message)+1, 0);

最佳答案

我不确定 C99 是否提供了编码标准,但我想它是特定于实现的。例如,它可以是 US-ASCII

发生的事情是 Java InputStreamReader(或输出)使用在操作系统某处或 Java 安装(不确定位置)中指定的默认字符集,因此它可能与C程序。

你能做的最好的事情就是测试各种编码,InputStreamReader 类确实提供了一个特定的构造函数:

public InputStreamReader(InputStream in, Charset cs)

您可以在其中指定要使用的字符集。看看here对于可能的字符集。

关于java - C99 客户端与 Java 服务器通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10730976/

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