При попытке подключиться к сокету с помощью клиента 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);