Проблема с выбором IP Socket Programming C # - PullRequest
0 голосов
/ 07 июля 2011

Я создаю сервер (на настольном компьютере), который прослушивает порт 4504, используя этот бит кода

                IPAddress[] AddressAr = null;
                String ServerHostName = "";

                try
                {
                    ServerHostName = Dns.GetHostName();
                    IPHostEntry ipEntry = Dns.GetHostByName(ServerHostName);
                    AddressAr = ipEntry.AddressList;
                }
                catch (Exception) { }

                if (AddressAr == null || AddressAr.Length < 1)
                {
                    return "Unable to get local address ... Error";
                }

                Listener_Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

                Listener_Socket.Bind(new IPEndPoint(AddressAr[0], Port));
                Listener_Socket.Listen(-1);

                Listener_Socket.BeginAccept(new AsyncCallback(EndAccept), Listener_Socket);

                return ("Listening On " + AddressAr[0].ToString() + ":" + Port + "... OK");

Теперь проблема в том, что я хочу запустить это на своем сервере и значениеAddressAr [0] Я хочу быть публичным IP-адресом моего сервера, но этот фрагмент возвращает локальный сетевой адрес сервера.

Как я хочу AddressAr [0] = "180.123.45.6" что-то [это публичный IP-адрес моего сервера], но с этим фрагментом я получаю AddressAr [0] = "192.168.2.2"

PS: я запускаю этот сервер как настольное приложение, и мои испытания были в режиме отладки.

Буду признателен за любую помощь.Спасибо.

Ответы [ 3 ]

1 голос
/ 07 июля 2011

Вам необходимо прослушать ваш локальный хост, который будет вашим 192.168.2.2 (это правильно), а затем перенаправить внешние пакеты / трафик с вашего публичного адреса на локальный компьютер.

Если вы используете, например, маршрутизатор linksys, вы можете перейти к NAT / QOS и перенаправить любой входящий трафик на определенный порт, например, 4504 на ваш локальный адрес машины 192.168.2.2

Любой стандартный домашний маршрутизатор будет иметь встроенную в прошивку переадресацию портов.

1 голос
/ 07 июля 2011

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

Запрос на маршрутизацию извне вы должны обработать на вашем роутере. Так что в основном это так.

Надеюсь, это поможет.

0 голосов
/ 07 июля 2011

Вы можете просто прослушивать любой IP-адрес, который есть у вашей машины:

listenerSocket.Bind(new IPEndPoint(IPAddress.Any, port));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...