@kos_dev

Как сделать сервер, который можно запустить на любой машине?

Здравствуйте, пытаюсь написать сервер-клиент на C#, с помощью сокетов и Tcp протокола. На локальной машине все запускается корректно, если клиент запущен на той же машине, что и сервер, то взаимодействуют они отлично, если же клиент запускает кто-то другой, с другого IP, то он не может подключиться к моему серверу. Собственно вопрос такой: как получить IP адресс интернет подключения, через которое работает сервер. Ниже я выложу код, которым пытаюсь получать IP адрес текущего сервера.
Если есть ресурсы с примерами, то скидывайте в качестве ответа это будет даже лучше. Всем заранее большое спасибо.

Момент с ipconfig:
Все адаптеры, кроме беспроводной локальной сети пишут, что среда передачи недоступна

string hostName = Dns.GetHostName(); // Имя машины на которой запущен сервер.
            IPHostEntry ipEntry = Dns.GetHostByName(hostName);  // IP адреса доступные на данной машине.
            IPAddress[] ipAdresses = ipEntry.AddressList; // Преобразую в список всех адресов, у меня доступен 1.
            IPAddress serverIP = ipAdresses[0]; // Получаю данный IP адресс
                    // Данный IP заносится в БД, а клиент получает его при запуске приложения и пытается к нему подключиться.
  • Вопрос задан
  • 819 просмотров
Пригласить эксперта
Ответы на вопрос 5
devspec
@devspec
Помогло? Отметь решением
Здесь может быть несколько вариантов.
Если клиент находится по ту сторону роутера - нужно пробросить порт от роутера к вашему компьютеру.
Если клиент находится в той же локальной сети - добавьте в исключения своего фаервола необходимый порт.
Также есть большая вероятность, что у вас Visual Studio запущено не с правами администратора (даже если вы - локальный админ, Visual Studio всё равно запускается с минимально необходимыми правами по умолчанию).
Ну и, наконец, можно воспользоваться следующей командой, чтобы открыть порт наружу для пользователя "Все":

netsh http add urlacl url=http://+:8765/ user=Все listen=yes

Здесь порт 8765 - нужно поменять на свой.
Ответ написан
Konstantin18ko
@Konstantin18ko
Стоматолог
Пробрось порты. Forward port, если машина за роутером, так ещё и NAT надо пробросить.
Ответ написан
Комментировать
@John_Nash
coder
string hostName = Dns.GetHostName(); // Имя машины на которой запущен сервер.
            IPHostEntry ipEntry = Dns.GetHostByName(hostName);  // IP адреса доступные на данной машине.
            IPAddress[] ipAdresses = ipEntry.AddressList; // Преобразую в список всех адресов, у меня доступен 1.
            IPAddress serverIP = ipAdresses[0]; // Получаю данный IP адресс
                    // Данный IP заносится в БД, а клиент получает его при запуске приложения и пытается к нему подключиться.


получите адрес типа "::1" - аналог 127.0.0.1 для ipv6
Неудивительно, что клиенты не могут достучаться до сервера
Ответ написан
Rou1997
@Rou1997
если же клиент запускает кто-то другой, с другого IP, то он не может подключиться к моему серверу

Этот другой подключен к тому же роутеру, что и ваш компьютер?
Если нет, то это уже глобальная сеть, здесь прежде всего серверу необходим статический и главное "белый" IP, либо оформляйте у провайдера за дополнительную плату либо купите VPS, и IP в данном случае нужен не 192.168.x.x, а "глобальный", при аренде VPS он у вас будет поскольку доступ по протоколам вроде SSH работает по тому же принципу и невозможен без него, программно его можно узнать только сделав запрос через глобальную сеть к сервису вроде 2ip.ru поищите такие сервисы есть, в крайнем случае напишите свой, скрипт на PHP в пару строчек, загруженный на какой-нибудь хостинг, и туда делать запрос черезSystem.Net.WebClient
Ответ написан
@OwDafuq
IPAddress.Any
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы