我正在寻找几个小时以获得有关我的问题的答案,但没有发现任何内容。也许我在这里得到一些帮助。从Java客户端接收数据(数据包含int,简写,字符串)
我在做什么: Java客户端发送消息到C-Server。该消息包含不同类型,如整数,短和字符串(例如message = int:total_msg_length; short:operation; string:hello - > total_msg-length = 4(整数大小),operation = 2 ,你好= 5(每个字母是1字节= 5)。
所以,我怎样才能在我的服务器接收消息?下面的代码接收一个Integer(工作正常)下一步将接收一个简短的然后用一个字符串(在US-ASCII转换)
int *msg;
int recv_size;
int final_msg;
if((recv_size = recv(client_socket, &msg, sizeof(msg), 0)) < 0){
error_exit("Fehler bei recv(message_len)");
}
final_msg = endian_swap(msg);
printf("Message: %d\n", final_msg);
return final_msg;
有林感谢每个帮助请原谅使用一个字节数组,而不是字符缓冲区的方式我的英语不好,我来自德国。?: - )
注意:您传递的''代替的sizeof(int)的''的sizeof(MSG)。你的代码工作原因是因为在大多数平台上两种尺寸都是相同的,但这是不正确的。你想要接收一个int,而不是一个int指针。通常,指针的大小与指向值的大小不同。 – Claudix
仔细阅读'recv()'/'send()'的手册页,并了解到至少对于套接字来说,这两个函数不一定会接收/发送尽可能多的字节,而是很少。因此,围绕此类呼叫进行计数,直到收到/发送所有数据都是一个好主意,而不是说必不可少。 – alk