2013-04-27 3 views
0

Я написал операцию сокета сервера и клиент на C#. Но мой клиент C# никогда не подключается к серверу android. Во время поиска я нашел этот вопрос. java.net.ServerSocket.accept() doesn't return on AndroidСерверный сокет не прослушивает правильный IP-адрес

My Socket Socket слушает ServerSocket [addr = 0.0.0.0/0.0.0.0, port = 0, localport = 5000]) вместо 10.0.2.15.Поддерживает меня в правильном направлении.

private String getLocalIpAddress() { 
    try { 
     for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { 
      NetworkInterface intf = en.nextElement(); 
      for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { 
       InetAddress inetAddress = enumIpAddr.nextElement(); 
       if (!inetAddress.isLoopbackAddress() 
         && InetAddressUtils.isIPv4Address(inetAddress.getHostAddress())) { return inetAddress.getHostAddress().toString(); } 
      } 
     } 
    } catch (SocketException ex) { 
     Log.e("ServerActivity", ex.toString()); 
    } 
    return null; 
} 

public class ServerThread implements Runnable { 

     public void run() { 
      try { 
       if (SERVERIP != null) { 
        handler.post(new Runnable() { 
         @Override 
         public void run() { 
          serverStatus.setText("Listening on IP: " + SERVERIP); 
         } 
        }); 
        serverSocket = new ServerSocket(SERVERPORT); 
        while (true) { 
         // LISTEN FOR INCOMING CLIENTS 
         Socket client = serverSocket.accept(); 
         handler.post(new Runnable() { 
          @Override 
          public void run() { 
           serverStatus.setText("Connected."); 
          } 
         }); 

         try { 
          BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); 
          String line = null; 
          while ((line = in.readLine()) != null) { 
           Log.d("ServerActivity", line); 
           handler.post(new Runnable() { 
            @Override 
            public void run() { 

            } 
           }); 
          } 
          break; 
         } catch (Exception e) { 
          handler.post(new Runnable() { 
           @Override 
           public void run() { 
            serverStatus.setText("Oops. Connection interrupted. Please reconnect your phones."); 
           } 
          }); 
          e.printStackTrace(); 
         } 
        } 
       } else { 
        handler.post(new Runnable() { 
         @Override 
         public void run() { 
          serverStatus.setText("Couldn't detect internet connection."); 
         } 
        }); 
       } 
      } catch (Exception e) { 
       handler.post(new Runnable() { 
        @Override 
        public void run() { 
         serverStatus.setText("Error"); 
        } 
       }); 
       e.printStackTrace(); 
      } 
     } 
    } 

ответ

1

Возможность использования мобильного устройства в качестве сервера зависит от конфигурации брандмауэра вашего мобильного интернет-провайдера. Обычно это отключено. Этот тип подключения может работать только тогда, когда устройство подключено через беспроводную, а не мобильную широкополосную связь.

0.0.0.0 в любом случае является недопустимым адресом. Игнорируйте его при попытке получить адрес вашего хоста.

+0

Я хочу протестировать это приложение на своем эмуляторе! есть все равно, чтобы это сделать? – Desire

+1

0.0.0.0 не является «недопустимым адресом». – EJP

+0

Используется для обозначения недействительной, неизвестной или не применимой цели и не маршрутизируемой. – h22

0

ServerSocket не прослушивает правильный IP-адрес

Да это. Нет ничего плохого в том, что ServerSocket возвращает 0.0.0.0 в качестве своего локального адреса. Это INADDR_ANY. Это просто означает, что он будет принимать соединения через любой локальный интерфейс. Это не ваша проблема.

+0

, но когда я пытался использовать IPAddress.Any в C# Client! он все еще не работает – Desire

+0

Вы использовали его. Вот почему вы видели 0.0.0.0. Это значение по умолчанию. Вы ничего не изменили, указав это явно. Это не проблема. – EJP

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