如何在java和c之间通过套接字正确发送数据?

时间:2013-11-07 18:06:04

标签: java c sockets

我目前正在尝试通过Java和c之间的套接字发送字符串。我能够从服务器(java)向客户端(c)发送一个字符串,反之亦然,但不能同时发送,这是我需要在两者之间进行通信的方式。在我的c(客户端)代码中,只要我插入读取部分,代码就会出现问题。

以下是我的两部分代码。假设套接字之间的连接成功是安全的。

的java:

private void handshake(Socket s) throws IOException{
    this.out = new PrintStream(s.getOutputStream(), true);
    this.in = new BufferedReader(new InputStreamReader(s.getInputStream()));
    String key = in.readLine(); //get key from client
    if(!key.equals(CLIENTKEY)){
        System.out.println("Received incorrect client key: " + key);
        return;
    }

    System.out.println("received: " + key);
    System.out.println("sending key");
    out.println("serverKEY"); //send key to client
    System.out.println("sent");
}

C:

    int n;
    n = write(sockfd,"clientKEY",9);
    if (n < 0)
    {
      perror("ERROR writing to socket");
      exit(1);
    }
  n = read( sockfd,recvBuff,255 );
  if (n < 0)
    {
      perror("ERROR reading from socket");
      exit(1);
    }
  printf("Here is the message: %s\n",recvBuff);

2 个答案:

答案 0 :(得分:2)

在我看来,C / C ++服务器向Java客户端发送clientKEY消息。 Java客户端读取一行,即等待它从C / C ++服务器接收\n字符。但是,它永远不会被C / C ++服务器发送,所以Java客户端永远等待......

答案 1 :(得分:2)

修改您的C发送代码:

char clientKey[] = "clientKEY\n"
n = write(sockfd,clientKey, strlen(clientKey));

最好为clientKey使用变量,然后调用strlen,这样就不必手动计算char。正如Jiri指出的那样,Java的readLine函数可能正在期待一个新行的char,它永远不会被它挂起。