2015-04-17 2 views
1

У меня есть Netduino Plus 2, выйдите в веб-службу, чтобы найти некоторые значения, которые я бы хотел использовать в моем проекте. Одним из значений, которые я проверил Netduino, является его предпочтительный IP-адрес. Если Netduino имеет другой IPAddress, чем его предпочитаемый, я хочу его изменить.Как правильно изменить статический IP-адрес с помощью Microframework?

У меня есть метод в моем проекте под названием BindIPAddress (ниже), который берет строку.

Я получаю исключение SocketException с кодом 10022 для недопустимого аргумента. Это происходит, когда я вызываю this.Socket.Bind. Мой класс имеет свойство Socket для хранения значения Socket. Это потому, что у моего сокета уже есть конечная точка? Я попытался добавить this.Socket = null, а затем this.Socket = new (....... мышление нам нужен новый сокет для работы с, но это вернуло ту же ошибку.

Пожалуйста, сообщите, как я могу изменить мой IP-адрес от одного статического IP-адреса на другой.

public void BindIPAddress(string strIPAddress) 
    { 
     try 
     { 

       Microsoft.SPOT.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()[0].EnableStaticIP(strIPAddress, "255.255.240.0", "10.0.0.1"); 
      Microsoft.SPOT.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()[0].EnableStaticDns(new string[] { "10.0.0.2", "10.0.0.3" }); 
      IPEndPoint ep = new IPEndPoint(IPAddress.Parse(strIPAddress), 80); 


      this.Socket.Bind(ep); 
      this.IpAddress = strIPAddress; 
     } 
     catch(SocketException exc) 
     { 
      Debug.Print(exc.Message); 
      Debug.Print(exc.ErrorCode.ToString()); 


     } 
     catch(Exception ex) 
     { 
      Debug.Print(ex.Message); 



     } 
     //Debug.Print(ep.Address.ToString()); 
    } 
+0

Является ли мой подход неправильным? –

+0

Создал ли объект сокета, правильно вызвав его конструктор, прежде чем связывать его? Конструктор Socket по умолчанию принимает три аргумента: AddressFamily, SocketType и ProtocolType. Прежде чем связывать ваш сокет с EndPoint, убедитесь, что вы его успешно создали. – Unavailable

ответ

2

Там может быть 2 возможных решения этой проблемы. Первый из них, вы можете программно установить желаемый IP-адреса как так, как вы пытались сделать это и второй, вы можете использовать инструмент MFDeploy, который поставляется с пакетом .NET Micro Framework SDK, который позволяет вам установить конфигурацию сети встроенного устройства статически, прежде чем запускать приложение на нем.

1) Поскольку вы не предоставили остальной код, вот правильный способ связывают сокет к EndPoint (на самом деле, я бы не разработать этот класс и функцию связывания, как, как вы публикуемую здесь, но только хотел подчеркнуть недостающие части вашего кода):

public void BindIPAddress(string strIPAddr) 
    { 
     Socket sock = null; 
     IPEndPoint ipe = null; 
     NetworkInterface[] ni = null; 

     try 
     { 
      ipe = new IPEndPoint(IPAddress.Parse(strIPAddr), 80); 
      sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // Assuming the WebService is connection oriented (TCP) 
      // sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); // if it broadcasts UDP packets, use this line (UDP) 
      ni = NetworkInterface.GetAllNetworkInterfaces(); 

      if (ni != null && ni.Length > 0) 
      { 
       ni[0].EnableStaticIP(strIPAddr, "255.255.240.0", "10.0.0.1"); 
       ni[0].EnableStaticDns(new string[2] { "10.0.0.2", "10.0.0.3" }); 
       sock.Bind(ipe); 
       this.Socket = sock; 
       this.IpAddress = strIPAddr; 
      } 
      else 
       throw new Exception("Network interface could not be retrieved successfully!"); 
     } 
     catch(Exception ex) 
     { 
      Debug.Print(ex.Message); 
     } 
    } 

2) или без программирования, используя только MFDeploy инструмента, который можно установить предпочтительный IP-адрес после подключения вашего встроенного устройства к компьютеру и следуя по пути ниже:

MFDeploy> Цель> Конфигурация> Сеть

затем введите предпочтительные IP-адреса. Это просто все.

+0

(ps: Я не уверен, что ваше встроенное устройство требует дополнительных вызовов функций после того, как программные настройки статической сети (например, освобождение базовых сетевых ресурсов, а затем использование новых и т. Д. Пожалуйста, сообщите мне после внедрения вашего кода, с наилучшими пожеланиями.) – Unavailable

+0

I оцениваю ваш ответ.Я попробую его и отчитаюсь.Я интересуюсь, почему вы не будете создавать класс и функцию привязки, как у меня? Я пытаюсь отделить некоторые проблемы в моем проекте. Например, этот метод I опубликовали это часть класса Network. Я хочу, чтобы сетевой класс отвечал за настройку IP-адреса. Любая обратная связь была бы оценена. Я стараюсь следовать лучшим практикам. –