【问题标题】:How to properly send data via sockets between java and c?如何通过java和c之间的套接字正确发送数据?
【发布时间】:2013-11-07 18:06:04
【问题描述】:

我目前正在尝试通过 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);

【问题讨论】:

  • 停止时是否显示错误消息?如果有,信息是什么?

标签: java c sockets


【解决方案1】:

修改你的 C 发送代码:

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

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

【讨论】:

  • 啊!!这很明显。谢谢!我必须记住 java 中的 println() 附加了 \n 字符。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 2017-04-29
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多