Разъем Android Socket отказался - PullRequest
4 голосов
/ 11 марта 2010

Я пытаюсь открыть Socket на Android, но каждый раз, когда я пытаюсь получить сообщение об ошибке «Отказано в соединении», независимо от того, каким образом я пытаюсь.

Ошибка происходит в следующей строке кода, где я пытаюсь создатьсоединение.


Socket socket = new Socket(getLocalIpAddressString(), 8008);

Ниже приведен метод, используемый для получения локального IP-адреса:


public static String getLocalIpAddressString() {
 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()) {
                 return inetAddress.getHostAddress().toString();
             }
         }
     }
 } catch (SocketException ex) {
     Log.e("IPADDRESS", ex.toString());
 }
 return null;

}


И ошибка, которую я получаю:


WARN/System.err(3574): java.net.ConnectException: /192.168.2.163:8008 - Connection refused
WARN/System.err(3574):     at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:237)
WARN/System.err(3574):     at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:199)
WARN/System.err(3574):     at java.net.Socket.startupSocket(Socket.java:734)
WARN/System.err(3574):     at java.net.Socket.<init>(Socket.java:157)
WARN/System.err(3574):     at com.networks.phone.engine.SIPEngine.rtpTest(SIPEngine.java:1444)

Я предполагаю, что это ошибка с моим Ipaddress и / или портом?Но кто-нибудь может указать мне правильное направление относительно того, что может быть причиной?

Ответы [ 5 ]

2 голосов
/ 08 июля 2011

Я использовал команду ipconfig в командной строке, а затем использовал «IPv4-адрес» для подключения к текущему ПК.

Я успешно подключился к серверу, а также отправил и получил байты.

Код на стороне клиента Android:

s = new Socket("192.168.42.85",12345);

Код стороны сервера ПК:

socket = ss.accept();
InetAddress ia = socket.getInetAddress();
System.out.println("Client Address: " + ia.getHostAddress());
2 голосов
/ 10 декабря 2010

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

Однако многие сети Wi-Fi и большинство мобильных сетей размещают устройство за NAT и внешним брандмауэром, поэтому попытки входящих подключений могут никогда не достигнуть его.

1 голос
/ 10 декабря 2010

В моем случае мне нужно было перенаправить порты, посмотрите:

http://developer.android.com/guide/developing/tools/emulator.html#redirections

Или, может быть, вы тоже можете попробовать переадресовать порты.

0 голосов
/ 08 марта 2017

У меня была такая же проблема.Мне пришлось использовать ServerSocket вместо Socket:

ServerSocket socket = new ServerSocker(8888);

0 голосов
/ 11 марта 2010

Предполагается, что из вашего кода вы пытаетесь открыть сокетное соединение от приложения Android к тому же устройству Android.

Будучи базирующимся на Linux и всех других, возможно, Android имеет какой-то брандмауэр или правила подключения, которые мешают вашему сокету успешно подключаться. Проверьте документацию, это может быть проблема конфигурации Android, а не проблема Java.

...