Nano Hash - криптовалюты, майнинг, программирование

Как установить соединения с ServerSocket из Интернета?

Мой ServerSocket слушает подключения по локальной сети и хорошо их принимает, но когда я пытаюсь подключиться к тому же через свой телефон - используя соединение 3G - он не подключается.

  1. Я попытался использовать сайт getMyIP, чтобы получить IP, и попытаться подключиться к нему, он действительно получает правильный IP (проверено с моим маршрутизатором), но тогда соединения вообще не принимаются.

  2. Я попытался открыть порт на Windows 7 и на моем маршрутизаторе в целом.

  3. Я помещаю эти строки в свой конструктор сервера:

    ss = new ServerSocket(port);
    host=ss.getInetAddress().getHostAddress();
    

    и я получаю ip на хосте 0.0.0.0

Спасибо за вашу помощь.


  • Находится ли машина, на которой запущен ServerSocket, за брандмауэром? 19.09.2012
  • только брандмауэр windows7 19.09.2012
  • Я думаю, что для подключения к вашей машине из Интернета у вас должен быть общедоступный IP-адрес. 19.09.2012

Ответы:


1

У вас должен быть общедоступный IP-адрес. Если у вас есть маршрутизатор, он должен пропускать трафик для порта, который вы хотите открыть для Интернета на вашем компьютере. Если у вас есть брандмауэр, он должен разрешать внешние подключения к этому порту.

Все изменения, которые вы делаете, одинаковы независимо от используемого вами языка, и вы ничего не можете сделать из Java, чтобы обойти необходимость делать эти вещи.

19.09.2012
  • Питер, проблема IMO, с которой OP сталкивается с привязкой сокета к IP-адресу, выделенному провайдером OP. По умолчанию это 0.0.0.0. Нужна и явная привязка. 19.09.2012
  • Когда вы привязываетесь к 0.0.0.0, он привязывается ко всему. Вы все еще связаны, вы просто не знаете, к чему. 19.09.2012
  • Любой активный интерфейс независимо от IP-адреса. 19.09.2012

  • 2

    - Пока вы находитесь в LAN, вы можете использовать Private IP, а также Public IP ranges

    - Но когда вы используете Internet для доступа к серверу, который находится у вас дома, вам необходимо иметь static Public IP address.

    - Вы можете запросить static Public IP address у своего интернет-провайдера за дополнительную плату, также есть некоторые сайты в сети, которые каким-то образом предоставляют статический IP-адрес на основе вашего динамического IP-адреса.

    Диапазоны частных IP-адресов нельзя использовать в Интернете.

    Class A - 10.0.0.0 - 10.255.255.255  
    
    Class B - 172.16.0.0 - 172.31.255.255
    
    Class C - 192.168.0.0 - 192.168.255.255
    
    19.09.2012
  • но все же, почему я получаю 0.0.0.0 с этого сервера сокетов? и как мне изменить свой код, чтобы serversocket размещался на общедоступном IP-адресе, а не на этом IP-адресе 0.0.0.0? 19.09.2012
  • @OfekRon вам нужен статический общедоступный IP-адрес для размещения вашего ServerSocket на этом IP-адресе на некоторых номерах портов ....... Ваш ServerSocket не может получить IP-адрес, 19.09.2012
  • Я попытался использовать IP-адрес моего маршрутизатора, поскольку он предоставляется сайтом WhatsMyIP, это, безусловно, не частный IP-адрес, и все же это не сработало ... пожалуйста, дайте мне более подробные инструкции, потому что я действительно запутался. 19.09.2012
  • @OfekRon 0.0.0.0 в данном контексте означает все IP-адреса на локальном компьютере. Таким образом, если ваш компьютер с веб-сервером имеет два IP-адреса, 192.168.1.1 и 10.1.2.1, и вы разрешаете демону веб-сервера, такому как apache, прослушивать 0.0.0.0, он будет доступен с обоих этих IP-адресов. Но только к тому, что может связаться с этими IP-адресами и веб-портами. Но вам по-прежнему нужен статический общедоступный IP-адрес. Обратите внимание, что в другом контексте (маршрутизация) 0.0.0.0 обычно означает маршрут по умолчанию (маршрут к остальной части Интернета, помимо маршрутов в вашей локальной сети и т. д.). 19.09.2012
  • @OfekRon вам нужен статический общедоступный IP-адрес .... статический, поэтому этот сервер доступен в любой момент времени. 19.09.2012
  • @OfekRon Я уже упоминал об этом в своем ответе ... но все же .... вам нужно немного доплатить за это вашему интернет-провайдеру, или в сети есть какой-то сайт, который каким-то образом преобразует ваш динамический IP в статический IP 19.09.2012
  • ну, мне давно дал статический IP-адрес от интернет-провайдера, но как мне на самом деле получить его значение и как мне получить serversocket для привязки к нему? 19.09.2012
  • Сначала подтвердите, что у вас есть статический общедоступный IP-адрес... см. это еще раз. СТАТИЧЕСКИЙ И ОБЩЕСТВЕННЫЙ - это слова. тогда вы можете просто сделать то, что вы делаете, чтобы инициализировать ServerSocket, сохранить номера портов выше 1024..... и отключить любой брандмауэр между ними. или создайте исключение в брандмауэре 19.09.2012

  • 3
    1. Проверьте ваш брандмауэр, разрешает ли он входящие соединения. Вам нужно сделать и исключение там.
    2. вам необходимо явно привязать IP-адрес на вашем компьютере, который выделен на этот момент времени вашим интернет-провайдером.
    3. Вы можете получить выделенный вам IP-адрес, выполнив команду ipconfig в командной строке Windows.
    4. Используйте следующий код для привязки к определенному IP-адресу

      InetSocketAddress insa = new InetSocketAddress("22.23.23.111", 9090);       
      ServerSocket ss = new ServerSocket();
      ss.bind(insa);
      String host=ss.getInetAddress().getHostAddress();
      System.out.println(host);
      

    Это печатает IP-адрес, выделенный вам.

    19.09.2012
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..