2012-12-30 96 views
2

我试图搭建一个java server的一个和一个c++ client在另一边的客户端/服务器应用程序。winsock和java socket之间的通信

客户:

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

请注意,这不一定是'Winsock和Java套接字之间的通信'。在Windows上,每个套接字都是Winsock套接字,包括Java套接字。 – EJP

回答

3

一个常见的错误使用的readLine(时)是忘记送一行文字

的我会检查你送一个换行符。例如\n

+1

谢谢,现在它可以工作。我没有想过...... – Challex