我的Java服务器发送一个Integer和一个String(到一个C客户端):
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
dos.writeInt(ClientNumber); //send the Integer
String randomString= getRandomValue(10,20);
dos.writeUTF(randomString); //send the String
String clientString=din.readLine();
正在阅读它们的客户端的C代码是:
if( recv( to_server_socket, &reply, sizeof( reply ), MSG_WAITALL ) != sizeof( reply ) )
{
printf( "socket read failed");
exit( -1 );
}
char buf[50];
int byte_count;
byte_count = recv(to_server_socket, buf, sizeof buf, 0);
printf("recv()'d %d bytes of data in buf\n", byte_count)
直到这里,它运作良好。
现在,我想向客户端发送另一个字符串。所以,我试着添加一行:
dos.writeUTF("blabla");
它仍在工作,当我试图让客户阅读时,我补充道:
byte_count2 = recv(to_server_socket, buf2, sizeof buf2, 0);
printf("recv()'d %d bytes of data in buf\n", byte_count2);
它不起作用。客户端接收数字和第一个字符串,但它不发送任何内容,也不接收“blabla”字符串。我不确定问题出在客户端还是服务器上。
任何人都可以向我解释我做错了吗?
答案 0 :(得分:1)
每次写入后尝试关闭dos(DataOutpuStream)。如果冲洗有帮助,您可以先尝试检查。
答案 1 :(得分:1)
您正在混合您的协议。我建议你使用二进制或文本线格式。目前尚不清楚你要使用哪一个。
我建议使用文本线格式,因为在这种情况下更容易使用。即不要将DataInputStream或DataOutputStream用于二进制格式。
相反,您可以使用BufferedReader读取文本行,使用PrintWriter写入文本行。您可以通过使用telnet
连接到服务器来测试您的服务器,即如果它不能与telnet一起使用,它将无法与C一起使用。
一旦这样做,让你的C客户端也能正常工作。顺便说一句你不应该假设一次写入转换为一次读取。您正在编写数据流,而不是消息。