Как организовать взаимодействия java-сервера и android-клиента в локальной сети?
Суть такая: на компьютер устанавливается приложение, которое выполняет роль сервера для локальной сети. Приложение-клиент на андроид устройстве должно подключаться к этой же локальной сети и прокидовать на сервер некоторые данные. Все казалось бы отлично - сервер прекрасно работает, но вот андроид не хочет подключаться по схеме new Socket("localhost", port); Для теста написал клиент на пк - все работает при таком объявлении. Умом понимаю, что надо делать что-то со стороны андроида и разбираться в этом, первая мысль - возможно стоит указать более явный IP, но я не уверен что проблема в этом, конечно. Если можете в целом подсказать решение проблемы и как организовать взаимодействие в локальной сети - буду очень благодарен.
З.ы подразумевается, что "сервер" на пк - приложение, которое может поставить любой человек и взаимодействовать с ним со своего телефона.
З.ы.ы при явном указании ip адреса конект происходит, только вот вопрос опять же в том, что на каждом новом компе он свой. Моя мысль - выводить на пк айпи, который необходимо будет ввести в мобильном клиенте для конекта. Не очень нравится это решение, хотелось бы услышать более грамотные решения
Конечно же к localhost андроид не подключится! Так как localhost соответствует адресу 127.0.0.1, который отвечает за локальный (loopback) интерфейс своего же устройства. Этот адрес есть на каждом устройстве или компьютере и создан для взаимодействия сетевых программ внутри операционной системы.
Другими словами, Вам нужно указывать для подключения ip-адрес компьютера, на котором зпущен сервер.
Ну и для обмена вполне подойдет протокол http/https, и подключаться легче и свой протокол писать не нужно, и куча фреймворков-библиотек есть для этого. На клиентской стороне вполне подойдет httpok, на серверной - springboot, jooby, spartjava и пару десятков других, включая tomcat и jetty.
springboot это конечно хорошо и все бы было отлично и быстро сделано, но тут идеалогически не подходит, даже не спрашивайте почему. :) Ну как бы да, тема с локалхост работает только для клиента пк, это я уже осознал методом практического впиливания ip. В связи с этим, красивое решение определения ип сервера актуально, попробую его найти
Владислав Винокуров, нет, нет, нет. Именно спрошу, что это за идеология? И почему у меня и практически у всех это работает на сотни-тысячи устройств, а у Вас не может?
Я знаю десятки протоколов, некоторые реализовывал лично, но за почти 30 лет практики предпочту http, и в очень редких случаях буду искать что-то особенное.
Алексей Черемисин, задние такое. Лучше бы помогли с решением того, что я не смогу к каждому, кто скачает приложение-сервер прийти домой и вручную вписать их айпи.
А то что в коммерческом масштабе не использовать уже обкатанные вещи - такое себе, я и сам прекрасно понимаю
Хорошо, порробуйте на андроиде открыть серверный udp-сокет и прослушивать броадкаст-адрес. С сервера раз в секунду например посылайте броадкаст сообщения со своим ip-сервера
Алексей Черемисин, я в общем-то с андроидом не очень в хороших отношениях, поэтому многих деталей не знаю. Суть в чем: теперь на эмуляторе у меня все работает прекрасно, конектится, все красиво, как хотел. А телефон по сокетам тупо не подключается. там грубо говоря при нажатии кнопки "начать работу" заупскается что-то типа connection = new connection(ip, port), а внутри этого конекшена вся работа с соеками уже происходит. Но на телефоне ничего не происходит, не подключается. Может какие разрешения надо выдавать или прописывать что?