Сокеты Java не работают на Android (ECONNREFUSED) - PullRequest
0 голосов
/ 17 декабря 2018

При попытке подключиться к сокету с помощью клиента Android я получаю ECONNREFUSED ConnectException.

Когда я запускаю код на своем компьютере, он работает нормально, я могу подключиться к удаленному серверу (raspberry pi, haskell) без проблем (так что мы можем исключить эту возможность).

Соответствующий код из ConnectionManager.class (ошибка в строке s = connect):

    @Override
    protected void onHandleIntent(Intent intent) {
    try {
        s=connect();
        socket_out = new PrintWriter(s.getOutputStream(), true);
        socket_in = new BufferedReader(new InputStreamReader(s.getInputStream()));
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Функция подключения (ошибка, выдаваемая в строке «вернуть новый сокет»)

    private Socket connect() {
    try {
        return new Socket("Thereisarealip in here",Realport);
    } catch (IOException ex) {
        Logger.getLogger(ConnectionManager.class.getName()).log(Level.SEVERE, null, ex);
    }
    throw new RuntimeException();
}

Разрешения XML включают следующие

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<service android:name=".ConnectionManager"></service>

Java-класс ConnectionManager вызывается из основного потока с использованием:

    Intent intent = new Intent(this, ConnectionManager.class);
    startService(intent);

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

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

0 голосов
/ 18 декабря 2018

ECONNREFUSED генерируется только тогда, когда сервер либо не прослушивает указанный порт, либо не может обработать запрос.Убедитесь, что ваш сервер может получать соединения постоянно.Для этого прослушивайте входящие соединения в одном потоке и обрабатывайте их в другом потоке, не блокируя процесс прослушивания.Как я вижу, разрешение ИНТЕРНЕТ уже объявлено в манифесте, поэтому проблема может быть только на стороне сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...