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()
問題は、接続が成功した後、関数が1で返されるにもかかわらず、サーバーがハングアップsend()
することです。これは、データの送信が成功したことを意味します。
クライアントの一部を削除するrecv()
と、すべてが正しく機能します。したがって、それはとの組み合わせだけで問題send()
をrecv()
引き起こしているようです。