我正在尝试构建一个客户端/服务器应用程序,其中一个java server
和另一侧c++ client
。
客户:
while(true)
{
sock = con.connectToServer(argv[2], port);
if(sock!=NULL)
{
_itoa_s(clientID,sendBuffer,16,10);
send(sock,sendBuffer,strlen(sendBuffer),0);
printf("waiting for response\n");
bytes = recv(sock,recvBuffer,sizeof(recvBuffer)-1,0);
recvBuffer[bytes] = '\0';
printf("%s",recvBuffer);
closesocket(sock);
}
Sleep(3000);
}
服务器线程:
public void run()
{
try{
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
out = new BufferedWriter (new OutputStreamWriter(clientSocket.getOutputStream()));
int signID = Integer.parseInt(in.readLine());
System.out.println("signID: " + signID);
//Precessing DataRequest for specific TrafficSign here
clientSocket.close();
}
catch(Exception ex){
System.out.println("Exception in TrafficSignServerThread -> " + ex.toString());
}
}
问题是,在成功连接之后,服务器挂起in.ReadLine()
,尽管send()
函数返回1,这意味着发送数据是成功的。
如果我删除了客户端的recv()
部分,一切正常。因此,似乎只有send()
和recv()
的组合才会导致问题。
答案 0 :(得分:3)
使用readLine()时常见的错误是忘记发送一行文字
我会检查你发了换行符。例如\n