2013-07-31 80 views
0

我正在編程一個簡單的套接字客戶端 - 服務器應用程序,android設備將是服務器,PC是客戶端。連接到通過USB調試插座的設備,套接字編程

在服務器端,打開插座這樣的:

 Socket s = null; 
     try { 
      mServerSocket = new ServerSocket(6000); 
      Log.e("tag", getLocalIpAddress()); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     while (true) { 
      Message m = new Message(); 
      m.what = MSG_ID; 
      try { 
       if (s == null) 
        s = mServerSocket.accept(); 
       BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream())); 
       String st = null; 
       st = input.readLine(); 
       mClientMsg = st; 
       myUpdateHandler.sendMessage(m); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 

和客戶端:

Socket socket; 
    try { 
     InetAddress serverAddr = InetAddress.getByName("10.0.2.2"); 
     socket = new Socket(serverAddr, 6000); 
     PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true); 
     out.println("Hello server"); 
     System.out.println("Sent message to server"); 
     } catch (UnknownHostException e1) { 
     e1.printStackTrace(); 
     } catch (IOException e1) { 
     e1.printStackTrace(); 
     } 

運行服務器後,我已經運行在客戶端,它的送花兒給人表明

> java.net.ConnectException: Connection timed out: connect 
    at java.net.TwoStacksPlainSocketImpl.socketConnect(Native Method) 
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source) 
    at java.net.PlainSocketImpl.connect(Unknown Source) 
    at java.net.SocksSocketImpl.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at java.net.Socket.<init>(Unknown Source) 
    at java.net.Socket.<init>(Unknown Source) 
    at main.main(main.java:19) 

看起來像客戶端的IP地址不正確。但我不知道服務器的ip地址是什麼!

注:我使用一個真正的設備,通過USB調試連接。

謝謝。

+1

USB與插座有什麼關係?無論IP是什麼,它都不存在/有通往它的路線。 –

+0

就像使用模擬器一樣,我可以使用10.0.2.2,但是在真實的設備上使用usb連接,10.0.2.2不起作用。 –

+0

這個項目使用USB和adb來使用插座 https://github.com/quamotion/madb – esdebon

回答

1

如果您不知道要連接的設備的確切IP或可解析主機名,則無法直接使用TCP。

您可能會想到在服務器端進行廣播或多播以在整個網絡中宣佈服務器,或者對服務器進行廣播或多播以發現其地址;但這取決於您正在處理的應用程序。

+0

所以我應該使用Emulator :-) –