2013-07-31 5 views
0

Я программирую простое приложение-клиент-сервер сокета, устройство Android будет сервером, а ПК - клиентом.Подключитесь к устройству, которое подключается через usb debug, программирование сокетов

На стороне сервера, открыть сокет так:

 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

Так что я должен использовать эмулятор :-) –

Смежные вопросы