한 클라이언트에는 java server
, 다른 한 서버에는 c++ client
이라는 클라이언트/서버 응용 프로그램을 구축하려고합니다.winsock과 java 소켓 간의 통신
클라이언트 :
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);
}
서버 스레드 다음 성공적인 연결 후 send()
함수가 1 반환하지만
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()
에 끊고있다 데이터가 성공적이었습니다.
클라이언트의 recv()
부분을 제거하면 올바르게 작동합니다. 따라서 send()
과 recv()
의 조합 만 문제를 일으키는 것으로 보입니다.
반드시 'Winsock과 Java 소켓 간의 통신'은 아닙니다. Windows에서 모든 소켓은 Java 소켓을 포함하여 Winsock 소켓입니다. – EJP