Как правильно изменить статический IP-адрес с помощью Микрофрейма?

Мой Netduino Plus 2 отправляется в веб-службу для поиска некоторых значений, которые я хотел бы использовать в своем проекте. Одно из значений, которое я проверил на Netduino - это его предпочтительный IP-адрес. Если у Netduino IP-адрес отличается от его предпочтения, я хочу изменить его.

В моем проекте есть метод BindIPAddress (ниже), который принимает строку.

Я получаю SocketException с кодом 10022 для недопустимого аргумента. Это происходит, когда я называю это. 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());
    }

1 ответ

Может быть 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> Target> Configuration> Network

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

Другие вопросы по тегам