Socket C客户端和Java服务器只能发送一个字符串
我的Java服务器发送一个整数和一个字符串(到C客户机): 读取它们的客户端的C代码是:Socket C客户端和Java服务器只能发送一个字符串,java,c,sockets,Java,C,Sockets,我的Java服务器发送一个整数和一个字符串(到C客户机): 读取它们的客户端的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 =
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”字符串。我不确定问题出在客户端还是服务器上
有人能解释一下我做错了什么吗?每次写入后,请尝试关闭您的dos(DataOutpuStream)。您可以先检查flush是否有帮助。您正在混合协议。我建议您使用二进制或文本线格式。现在还不清楚你想用哪一个 我建议使用文本线格式,因为在这种情况下更容易使用。i、 不要使用DataInputStream或DataOutputStream,因为它们是二进制格式 相反,您可以使用BufferedReader读取文本行,使用PrintWriter写入文本行。您可以通过使用
telnet
连接服务器来测试服务器的工作情况,也就是说,如果它不能与telnet一起工作,那么它就不能与C一起工作
一旦这项工作开始,让您的C客户机也开始工作。顺便说一句,你不应该假设一次写转换成一次读。您正在写入的是数据流,而不是消息流。如果您发布的是您的扩展版本,则应删除旧版本以避免重复。我不明白您的意思,如果我关闭dos,则会出现错误。我需要帮助。但是如果我更改字符串clientString=din.readLine();使用readUTF()时,它与java客户机完美配合。所以我认为问题在于客户。我不明白为什么我试图在发送的东西不起作用之前收到它
byte_count2 = recv(to_server_socket, buf2, sizeof buf2, 0);
printf("recv()'d %d bytes of data in buf\n", byte_count2);