2016-12-29 9 views
2

У меня есть проект удаленного рабочего стола, необходимо подключиться с помощью DNS-сервераИспользование ошибок сервера DNS

У меня есть ошибка о том, что формат IP и недействительных

private static void ConnectToServer() 
     { 
      int attempts = 0; 

      while (!clientSocket.Connected) 
      { 
       try 
       { 
        attempts++; 
        Console.WriteLine("Connection attempt " + attempts); 

        // clientSocket.Connect(IPAddress.Parse(Dns.GetHostAddresses("kamikazehc.ddns.net")), port); 
        clientSocket.Connect(IPAddress.Parse("kamikazehc.ddns.net"), port); 
        Thread.Sleep(100); 
       } 
       catch (SocketException) 
       { 
        Console.Clear(); 
       } 
      } 

      Console.Clear(); 
      Console.WriteLine("Connected"); 
     } 

Edit:

Это код остается во внешнем пользователе, мой компьютер работает как администратор.

Когда пользователь запускает консоль, он должен соединиться с kamikazehc.ddns.net, (мой компьютер)

Kamikazehc.ddns.net решает на 189.6.26.203.

Я могу только подключить локально Использование:

clientSocket.Connect(IPAddress.Parse("192.168.1.102"), port); 

Когда пользователь подключается к компьютеру он должен появиться в этом списке:

http://prntscr.com/dpelr6

private static Socket clientSocket = new Socket 
     (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 

    private const int port = 100; // same as server port 
+0

Вы должны использовать [Dns.GetHostEntry] (https://msdn.microsoft.com/en-us/library/ms143998 (v = vs.110) .aspx) вместо 'IPAddress.Parse' – bansi

+0

работает от cmd.exe> ​​IPConfig/All. Проверьте имя сервера DNS. Затем из cmd.exe попробуйте выполнить ping-сервер, чтобы получить IP-адрес. Метод IPAddress.Parse() ожидает IP-адрес. Используйте следующее: LocalHostIPEntry = Dns.GetHostEntry (LocalHostName); LocalHostIP = LocalHostIPEntry.AddressList [0]; – jdweng

+0

http://prntscr.com/dpepy5 Сервер DNs –

ответ

0

Вы должны использовать Dns.GetHostEntry чтобы получить разрешение имени домена на IP-адрес.

IPAddress.Parse только преобразует строку IP-адреса в экземпляр IPAddress.

попробовать

clientSocket.Connect(Dns.GetHostEntry("kamikazehc.ddns.net").AddressList[0], port); 

Примечание: Здесь первый IP-адрес возвращается в записи хоста используется для подключения.

Редактировать:
Из комментариев: Ваша проблема в том, что вы не совсем понимаете, как работает сеть TCP IP. вам нужно разрешить имя для вашего локального IP-адреса. обычно публичные IP-адреса не будут работать внутри локальной сети. Вы можете сделать следующее.

Добавить запись хоста в system32/и т.д./драйверы/файл хостов

192.168.1.102 kamikazehc.ddns.net 

Лучше, если вы можете изменить ваши DNS записи хост-сервера, чтобы сделать другую решительность для внутренней сети. Но я не рекомендую его вам на вашем уровне сейчас. Если у вас есть администратор сети, вы можете попросить его сделать это за вас. то вам не нужна запись хоста.

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

+0

'192.168.1.102' - это строковый синтаксический анализ как IP-адрес. так что это правильно. где 'kamikazehc.ddns.net' является доменным именем, а DNS необходимо разрешить на соответствующий IP-адрес. Так что вам нужны 'Dns.GetHostEntry' для этого – bansi

+0

Работает только при использовании локального ip: 'clientSocket.Connect (IPAddress.Parse (« 192.168.1.102 »), порт);' –

+0

yes '192.168.x.x' range - это локальный IP-адрес. для меня 'kamikazehc.ddns.net' разрешается как' 189.6.26.127' – bansi