2013-07-31 46 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 :-) –