我正在尝试将一个字符串(char ** topics
)数组从C服务器发送到Java客户端。显然,服务器正确发送主题,但客户端没有收到它们。
/* SERVER */
while (*topics != NULL) {
printf(" > Sending topic '%s'.. ", *topics);
if(write(sd, *topics, sizeof(*topics)) == -1) {
perror("write");
exit(1);
}
printf("[OK]\n");
topics++;
}
客户端看起来像这样:
/* CLIENT */
static void server_connection() {
String topic = null;
try {
Socket _sd = new Socket(_server, _port); // Socket Descriptor
// Create input stream
DataInputStream _in = new DataInputStream(_sd.getInputStream());
BufferedReader _br = new BufferedReader(new InputStreamReader(_in));
System.out.println("s> Current Topics:");
while ((topic = _br.readLine()) != null) {
System.out.println(topic);
}
if(topic == null) {
System.out.println("Not topics found");
}
// Close socket connection
_out.close();
_in.close();
_sd.close();
} catch(IOException e) {
System.out.println("Error in the connection to the broker " + _server + ":" + _port);
}
}
客户端显示
s> Current Topics:
并且仍在等待......:/
答案 0 :(得分:2)
write(sd, *topics, sizeof (*topics))
topics
是char**
,因此*topics
是指向char
的指针。因此,sizeof *topics
是指针的大小,可以是2或4或8个字节,具体取决于您的体系结构。这不是你想要的。你想要strlen(*topics)
,假设它们是以空字符结尾的字符串。
当您在接收器中读取线路时,您需要在发送方中发送线路。除非数据已包含换行符,否则您需要在发件人中添加一个。