2012-12-30 2 views
2

한 클라이언트에는 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()의 조합 만 문제를 일으키는 것으로 보입니다.

+0

반드시 'Winsock과 Java 소켓 간의 통신'은 아닙니다. Windows에서 모든 소켓은 Java 소켓을 포함하여 Winsock 소켓입니다. – EJP

답변

3

일반적인 실수 작성한 Readline (사용) 난 당신이 개행 문자를 보내 확인 할 에게

텍스트의 라인을 보낼 것을 잊지하는 것입니다. 예 : \n

+1

감사합니다. 이제 작동합니다. 나는 그것에 대해 생각하지 않았다 ... – Challex