Socket. Client не может отправить сообщение на Server, запущенном на Android смартфоне, подключённого через 3G.
http://www.gamefromscratch.com/post/2014/03/11/LibGDX-Tutorial-10-Basic-networking.aspx . Если запустить приложение на компьютере - сервер работает отлично! принимает сообщения с клиента как с устройств, находящиеся в одной с ним сети, так и с других сетей через интернет. Если запустить эту же программу на Android смартфоне, подключенному к интернету через МТС-овский 3G, то сервер там становится невидимым для других устройств в интернете и не может принять сообщение. Через WiFi по домашней сети смартфон принимает всё отлично. Эта ошибка абсолютно не связана с особенностями движка LibGdx, так как он использует стандартную java.nio. После долгих размышлений, я пришёл к выводу, что ошибка заключается в том, что МТС выступает, как прокси сервер и мой смартфон находится, как-бы, в его подсети. Так как ip адрес смартфон-провайдер у меня, к примеру (100.114.205.225) а провайдер-внешний ip (узнаю на https://2ip.ru/) (178.168.180.149). Соответственно ни по одному из этих адресов, клиент не может подключиться. Вопрос. Можно ли как-то подключиться к этому устройству через сокеты? И, если можно, то как? Даже, если этот способ будет не на базе LibGdx.
Здравствуйте, пишу программку (клиент-сервер) на Android на движке LibGdx. Пример кода взял от сюда:
Нужен какой-нибудь мастер-сервер с «белым» IP, либо надо использовать STUN.
Цитата: @pixo $oft
Нужен какой-нибудь мастер-сервер с «белым» IP, либо надо использовать STUN.
Дело в том, что WiFi и 3G/4G используют NAT, соответственно из-за этого и не видно устройство за пределами локальной сети. Придётся сделать перенаправление трафика через UPnP/DLNA протоколы. Есть такая либа, как Cling, которая работает с этими протоколами. Сейчас нужно только в ней как-то разобраться. Сервер на компе с белым IP запускать нет смысла, по скольку, в отличие от Си на Java, ClientSocket не может принимать сообщения от сервера и работает только на отправку (если мне не изменяет память)
Выше дали верный совет - внешний сервер (как у TeamViewer, например).