Получить свой внешний IP средствами С#

Программирование на Юнити.

Re: Получить свой внешний IP средствами С#

Сообщение Altodor 12 окт 2011, 06:48

Спасибо за подробнейший ответ.
Но я всё-таки ещё не понял, как в итоге реализовать задуманное :) Вы хотите сказать, что лучше использовать сетевой код Unity?
Задача у меня звучит просто - для flash v10 есть такая фича - 2 flash клиента могут общаться между собой по сокетам напрямую, избегая какой-то внешний сервер, этот сервис там называется Stratus. У меня задача - сделать то же самое на юнити. И тут возникает проблема с ip адресами.
Почему я не хочу использовать методы Unity? Потому что мне нужно, чтоб один клиент мог прислать другому всего пару-другую байт, и желательно со скоростью tcp-ip. При этом клиенты не должны различаться на сервер-клиент, то есть если в такой связке находятся несколько unity приложений, то выключение любого из них никак не влияет на общении оставшихся.
В Stratus сделано так - Я посылаю на американский сервер запрос, он в ответ присылает код. Этот код должны знать клиенты, с которыми я хочу пообщаться. Они обращаются к тому же серверу с этим кодом, и сервер в ответ присылает мои сетевые координаты (ip,port), по которым клиенты тут же ко мне коннектятся. При этом у каждого создаётся параллельных 2 сокета - на прослушку и на ответ. То есть по 2 сокета на каждого присоединённого клиента.
Мне нужно сделать также. Подскажите пожалуйста, как Вы видите реализацию этого кода? Может методами unity узнавать свой ip и порт, и сообщать его другим клиентам, а подсоединяться уже обычным TcpListener и TcpClient?
Altodor
UNIт
 
Сообщения: 82
Зарегистрирован: 19 сен 2010, 07:58

Re: Получить свой внешний IP средствами С#

Сообщение DbIMok 12 окт 2011, 12:08

почитайте эту тему
если вам нужен RTMFP, наверное нужно разместить где-то свой сервер (1, 2), через который клиенты будут связываться. ну и написать эти самые клиенты.
описание Master Server
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Получить свой внешний IP средствами С#

Сообщение Woolf 12 окт 2011, 15:06

Хм.. Насколько я понимаю, узнать адрес "за роутером" используя только свой комп нереально. Для таких вещей пишется простой пхп скрипт или маленький сервак, который размещается на стороннем сервере и отвечает на запрос тебе твой IP. По другому чтобы делали - я ни разу не слышал, а ведь с сетью и инетом работаю уже более 8 лет..

При большом желании узнать ip, но не делать сервер, можно почитать отсюда http://2ip.ru/, к примеру..
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Получить свой внешний IP средствами С#

Сообщение Altodor 12 окт 2011, 16:27

Теперь я начал практиковать и пошли проблемы. Для начала захожу на http://automation.whatismyip.com/n09230945.asp - мне говорят мой ip. Я сижу от роутера но без прокси. Затем я запускаю "сервер" с привязыванием к найденному ip:
Синтаксис:
Используется csharp
ipAddress = IPAddress.Parse("188.114.204.52");
server = new TcpListener(ipAddress, port);
server.Start();

Не пашет, пишет SocketException: Требуемый адрес для своего контекста неверен. Тогда запускаю сервер так:
Синтаксис:
Используется csharp
ipAddress = Dns.GetHostEntry("localhost").AddressList[0];
server = new TcpListener(ipAddress, port);
server.Start();

Запускается. Теперь запускаю клиент с кодом:
Синтаксис:
Используется csharp
TcpClient client = new TcpClient(IPAddress.Parse("188.114.204.52"),portToConnect);

Не подключается. Пишет SocketException: Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
Что неправильно?
Altodor
UNIт
 
Сообщения: 82
Зарегистрирован: 19 сен 2010, 07:58

Re: Получить свой внешний IP средствами С#

Сообщение DbIMok 12 окт 2011, 16:44

1. мы же выяснили, серверу не нужен IP
2. перед тем как использовать ф-ию, откройте документацию. если вы вешаете на локалхост, то только с него и соединитесь. чтобы слушать все интерфейсы, используйте any
Altodor писал(а):конечный компьютер отверг запрос на подключение

просканируйте порты, убедитесь что по этому адресу именно ваш компьютер, а не роутер. если это ваш компьютер, настройте файрвол, если это роутер, настройте на нем проброс портов или что-то подобное.
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Получить свой внешний IP средствами С#

Сообщение sp00n 12 окт 2011, 16:45

Или использовать любой доступный STUN-сервер.
Ты молод, креативен, талантлив?
Амбициозен, уверен в себе, полон свежих идей?
А делать хоть что-нибудь умеешь?!
sp00n
UNITрон
 
Сообщения: 254
Зарегистрирован: 27 фев 2010, 20:43

Re: Получить свой внешний IP средствами С#

Сообщение debuger1 12 окт 2011, 18:04

Altodor писал(а):Теперь я начал практиковать и пошли проблемы. Для начала захожу на http://automation.whatismyip.com/n09230945.asp - мне говорят мой ip. Я сижу от роутера но без прокси. Затем я запускаю "сервер" с привязыванием к найденному ip:
Синтаксис:
Используется csharp
ipAddress = IPAddress.Parse("188.114.204.52");
server = new TcpListener(ipAddress, port);
server.Start();

Не пашет, пишет SocketException: Требуемый адрес для своего контекста неверен. Тогда запускаю сервер так:
Синтаксис:
Используется csharp
ipAddress = Dns.GetHostEntry("localhost").AddressList[0];
server = new TcpListener(ipAddress, port);
server.Start();

Запускается. Теперь запускаю клиент с кодом:
Синтаксис:
Используется csharp
TcpClient client = new TcpClient(IPAddress.Parse("188.114.204.52"),portToConnect);

Не подключается. Пишет SocketException: Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
Что неправильно?




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

И еще найди реально рабочий пример клиент серверного приложения) пробуй его запустить с начало на локалке, потом уже через интернет.
Аватара пользователя
debuger1
UNец
 
Сообщения: 48
Зарегистрирован: 08 мар 2010, 19:05

Re: Получить свой внешний IP средствами С#

Сообщение TexeL 13 окт 2011, 02:40

ИзображениеИзображение
Аватара пользователя
TexeL
UNITрон
 
Сообщения: 244
Зарегистрирован: 15 ноя 2009, 20:57
  • Сайт

Re: Получить свой внешний IP средствами С#

Сообщение DbIMok 13 окт 2011, 03:27

STUN это шаг в правильном направлении. можно найти код/примеры на C#.
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Получить свой внешний IP средствами С#

Сообщение king_kong 15 окт 2011, 19:07

Neodrop писал(а):Нет. Это локальный адрес. А нужен тот, что за роутером. Как на пример на http://www.myip.ru
Ну, может это в моем случае не пашет.
Это я пробовал. Получаю адрес локалки. А выход в сеть через общий ADSL модем с роутером.


боюсь повторяюсь, но вот такой алгоритм тоже не показывает внешний адрес???
Синтаксис:
Используется csharp
using System;
using System.Net;

class classs
{
        static void Main(string[] args)
        {
                IPHostEntry host;

                host = Dns.GetHostEntry(Dns.GetHostName());

        Console.WriteLine("GetHostEntry({0}) returns:", Dns.GetHostName());

        foreach (IPAddress ip in host.AddressList)
        {
                Console.WriteLine("    {0}", ip);
        }
        }
}
Аватара пользователя
king_kong
UNец
 
Сообщения: 40
Зарегистрирован: 03 июн 2011, 21:58
Откуда: Барнаул

Re: Получить свой внешний IP средствами С#

Сообщение DbIMok 15 окт 2011, 20:03

вставить этот код и проверить дело пары минут. у кого-то покажет, но у большинства будут только локальные адреса.
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Пред.

Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 6