Клиентский сокет не подключается к серверному сокету

#java #android #sockets #networking

#java #Android #сокеты #сеть

Вопрос:

Я пытаюсь передать сообщение между двумя телефонами Android по локальной сети. Я читал сокеты, где есть хороший способ сделать это. (Я не могу использовать Bluetooth) (я также не могу использовать NFC)

Я создал серверное и клиентское приложение.

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

Оба файла манифеста содержат правильные разрешения. (с тегами html)
использует-permission android:name=»android.permission.ИНТЕРНЕТ» /
uses-permission> android:name =»android.permission.ACCESS_NETWORK_STATE»/

Сначала я подключаю сервер к сети:

       ServerSocket myServerSocket = new ServerSocket(27024);
      System.out.println("Server is waiting for incoming connection on host="   InetAddress.getLocalHost().getCanonicalHostName()   ", port="   myServerSocket.getLocalPort());
      Socket socket = myServerSocket.accept();
 

Затем попробуйте подключиться к клиенту.

             String host = "localhost";
            int port = 27024;

            try{
                System.out.println("Client attempting to connect to server at host: "   host   ", port: "   port);
                Socket socket = new Socket(host, port);

                //This below line never gets called :(
                System.out.println("Client socked created! Now trying to send data to server");

               }
 

В моей консоли:
Клиент пытается подключиться к серверу на хосте: localhost, порт: 27024

«Клиент был создан!» строка никогда не выводится.

Для обоих хостов установлено значение «localhost», а номер порта одинаков.
Я пробовал разные порты, но ничего не происходит.

Ответ №1:

 String host = "localhost";
int port = 27024;
 

Вы понимаете, что вашему клиенту необходимо указать IP-адрес сервера, верно?

Обратите внимание, что вы, скорее всего, не сможете или никогда не должны будете привязывать приложение к интерфейсу, отличному от WiFi.

Комментарии:

1. но и клиент, и сервер находятся в локальной сети, на локальном хосте?

2. localhost относится к устройству, на котором запущено приложение, и адрес всегда будет 127.0.0.1 локальным обратным циклом. Используя этот адрес, пакеты никогда не покидают устройство. Вам необходимо использовать IP-адреса каждого устройства на другом.

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

4. Хорошо, у меня работает эмулируемый телефон и настоящий телефон — пытаюсь подключить их обоих. Я ввел эмулируемый телефон (сервер) в качестве хоста клиентского приложения (IP-адрес хоста — 10.0.2.15). Но мне не повезло с подключением

5. Эмулированный телефон? Что вы имеете в виду? Эмулятор? Укажите, на каком сервере запущен ваш сервер. И точно укажите, где работает ваш клиент. Вы не можете использовать эмулятор и телефон. Но у вас было два телефона, не так ли? Сообщите нам IP-адрес телефона сервера. Сообщите нам IP-адрес клиентского телефона. (далее IP-адрес клиентского телефона не имеет значения).