我目前正在尝试通过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);
答案 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,它永远不会被它挂起。