Я уже понял что нужно обращаться к 10.0.2.2 (потому что 10.0.2.2 - это запрос в локальную сеть, а 127.0.0.1 запрос к самому себе) но дает ошибку failed to connect to /10.0.2.2 (port 5000) from /:: (port 58331): connect failed: ETIMEDOUT (Connection timed out). Пк выступает в роли сервера он слушает если что порт 5000 ServerSocket servSocket = new ServerSocket(5000);
Устройство и сервер в одной сети находятся? Если нет, есть ли между ними маршрутизация? Если да, не закрыт ли порт брандмауэром самого сервера или одного из промежуточных хопов?
Я сейчас понял что 10.0.2.2 не дает ошибки, но и ничего больше не дает. Код не выполняется дальше после Socket socket = new Socket("10.0.2.2", portNumber); Можно ли как-то вытащить ошибку?
вот код сервера, подскажите как отловить логи попыток подключения?
int port = 5000;
try {
// Открыть серверный сокет (ServerSocket)
// Это специальный класс для сетевого взаимодействия с серверной стороны
ServerSocket servSocket = new ServerSocket(port);
// Входим в бесконечный цикл - ожидаем соединения
while (true) {
System.out.println("Waiting for a connection on " + port);
// Получив соединение начинаем работать с сокетом
Socket fromClientSocket = servSocket.accept();
// Работаем с потоками ввода-вывода
try (Socket localSocket = fromClientSocket;
PrintWriter pw = new PrintWriter(localSocket.getOutputStream(), true);
BufferedReader br = new BufferedReader(new InputStreamReader(localSocket.getInputStream()))) {
// Читаем сообщения от клиента до тех пор пока он не скажет "bye"
String str;
while ((str = br.readLine()) != null) {
// Печатаем сообщение
System.out.println("The message: " + str);
// Сравниваем с "bye" и если это так - выходим из цикла
if (str.equals("bye")) {
// Тоже говорим клиенту "bye" и выходим из цикла
pw.println("bye");
break;
} else {
// Посылаем клиенту ответ
str = "Server returns: " + str;
pw.println(str);
}
}} catch (IOException ex) {
ex.printStackTrace(System.out);
}
}
} catch (IOException ex) {
ex.printStackTrace(System.out);
}
Самое очевидное предположение - на хосте 10.0.2.2 стоит какой-то файрвол, которые позволяет коннект с эмулятора, но не настроен принимать коннекты с другого устройства (телефона).
Попробуйте установить на телефон какой-нибуть telnet и выполнить прямой запрос telnet 10.0.2.2 5000