TCP-соединение через интернет - PullRequest
0 голосов
/ 16 марта 2019

Я делаю проект, для которого требуется соединение между сервером и клиентом. Я сделал это, добавив сокеты TCP.

Вот часть кода: Сервер:

    ServerSocket welcomeSocket = new ServerSocket(80);
    while(true)
    {
        Socket connectionSocket = welcomeSocket.accept();
        WorkerThread wt = new WorkerThread(connectionSocket, id);
        Thread t = new Thread(wt);
        t.start();
        workerThreadCount++;

    }

Клиент:

        Socket skt = new Socket("192.168.0.108", 80); // The IP address is from cmd->ipconfig/all-> IPv4 Address
        outToServer = new PrintWriter(skt.getOutputStream(), true);
        inFromServer = new BufferedReader(new InputStreamReader(skt.getInputStream()));

Все работает, когда оба конца находятся в одном устройстве / под одним и тем же WiFi. Но я не понимаю, что делать для создания соединения через Интернет.

Пожалуйста, помогите с четкими шагами.

Ответы [ 2 ]

1 голос
/ 16 марта 2019

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

192.168.0.108 -> Это ваш локальный IP-адрес.

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

Шаг 1. Найдите номер модели вашего маршрутизатора и переадресацию портов в Google, чтобы узнать, как переадресовать порт 80 на ваш локальный IP-адрес. Предупреждение: используйте статический IP-адрес на локальном устройстве, чтобы предотвратить изменение IP-адреса после перезагрузки.

Шаг 2: Зайдите на такой сайт, как IP Chicken и найдите свой внешний IP-адрес.

Затем вы можете подключиться к вашей розетке, используя:

Socket skt = new Socket("[EXTERNALIP]", 80);

Обратите внимание: если у вас нет деловой сети, ваш внешний IP-адрес может время от времени меняться.

1 голос
/ 16 марта 2019

Здесь:

Socket skt = new Socket("192.168.0.108", 80);

Это локальный адрес. Если вы хотите иметь сервер, доступный в Интернете, то этот сервер должен иметь свой глобальный публичный IP-адрес!

Другими словами: вы должны быть уверены, что сервер может быть как-то доступен из Интернета. Например, обратившись к какому-либо поставщику услуг, на котором размещены серверы, которые вы затем сможете оснастить своим кодом!

Целевое назначение адресов 192.168 должно быть определено только в локальной подсети.

В качестве альтернативы, вы должны проверить, есть ли у вашего интернет-провайдера услуга, при которой интернет-провайдер назначает вашему соединению IP-адрес, и который позволяет звонкам из Интернета переходить к вашему «месту».

Значение: если вы хотите получать телефонные звонки, вам нужен телефон, подключенный к телефонной сети!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...