2013-05-05 103 views
0

我的Java服务器发送一个整数和字符串(以C客户端):接口C客户端和Java服务器只能发送一个字符串

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

如果您发布了[上一个问题]的扩展版本(http://stackoverflow.com/q/16384315/335858),则应该删除旧的以避免重复。 – dasblinkenlight 2013-05-05 13:49:24

回答

1

尝试在每次写入后关闭您的dos(DataOutpuStream)。您可以尝试先检查冲洗是否有帮助。

+0

我不明白你,如果我关闭dos我会得到一个错误。冲洗剂量的帮助。但如果我改变字符串clientString = din.readLine();与readUTF()它完全与java客户端。所以我认为问题在于客户。我不明白为什么如果我在发送之前还没收到什么东西 – user2350329 2013-05-05 14:51:50

1

你正在混合你的协议。我建议你使用二进制或文本格式。目前还不清楚你试图使用哪一个。

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

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

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

+0

服务器100%用java客户端工作 – user2350329 2013-05-05 15:54:55

相关问题