Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Socket C客户端和Java服务器只能发送一个字符串_Java_C_Sockets - Fatal编程技术网

Socket C客户端和Java服务器只能发送一个字符串

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 =

我的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 = 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);