#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-адрес клиентского телефона не имеет значения).