0

我的 Java 服务器发送一个整数和一个字符串(到 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”字符串。我不确定问题出在客户端还是服务器上。

谁能向我解释我做错了什么?

4

2 回答 2

1

Try closing your dos(DataOutpuStream) after every write. You may try to check first if flush helps.

于 2013-05-05T14:42:55.797 回答
1

您正在混合您的协议。我建议您使用二进制或文本线格式。目前尚不清楚您要使用哪一个。

我建议使用文本线格式,因为在这种情况下更容易使用。即不要DataInputStream 或DataOutputStream,因为它们是用于二进制格式的。

相反,您可以使用 BufferedReader 读取文本行,使用 PrintWriter 写入文本行。您可以通过使用telnetie 连接到它来测试您的服务器是否正常工作,如果它不能与 telnet 一起使用,它就不能与 C 一起使用。

一旦这个工作正常,让你的 C 客户端也能工作。顺便说一句,您不应该假设一次写入转换为一次读取。您正在编写数据流,而不是消息。

于 2013-05-05T15:01:51.707 回答