iOS Microchip以太网Discoverer [英] iOS Microchip Ethernet Discoverer

查看:156
本文介绍了iOS Microchip以太网Discoverer的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我可以使用套接字发送/接收本教程

I can send/receive with socket as this tutorial

现在,我希望在插入时使用UDP发现嵌入式设备的IP地址启用DCHP的网络。通过基于GUI的iOS应用程序广播UDP发现请求,嵌入式设备可以接收请求并回复iOS应用程序,在网络上宣布它们的存在和IP地址。

Now, i want to use UDP to discover an embedded device’s IP address when plugged into a DCHP enabled network. With a GUI based iOS app broadcasting a UDP discovery request, embedded devices can receive the request and reply to the iOS app, announcing their presence and IP address on the network.

我的应用程序将收听PORT 30303 以获取发现请求。

My app will listen to the PORT 30303 for a discovery request.

这是PC应用程序的开源:

This is open source of PC app:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;

namespace Embedded_Device_Discoverer
{
    public partial class Form1 : Form
    {
        public delegate void AsyncCallback(IAsyncResult ar);
        public delegate void AddTolstDiscoveredDevices(object o);

        private UdpState GlobalUDP;

        public Form1()
        {
            InitializeComponent();
        }

        struct UdpState
        {
            public System.Net.IPEndPoint EP;
            public System.Net.Sockets.UdpClient UDPClient;
        }

        private void cmdDiscoverDevices_Click(object sender, EventArgs e)
        {
            try
            {
                // Clear the listbox of all current discovery responses
                listView1.Items.Clear();

                // Try to send the discovery request message
                byte[] DiscoverMsg = Encoding.ASCII.GetBytes("Discovery: Who is out there?");
                GlobalUDP.UDPClient.Send(DiscoverMsg, DiscoverMsg.Length, new System.Net.IPEndPoint(System.Net.IPAddress.Parse("255.255.255.255"), 30303));
            }
            catch
            {
                MessageBox.Show("Unable to transmit discovery message.  Check network connectivity and ensure that no other instances of this program are running.", "Error", MessageBoxButtons.OK);
                return;
            }
        }

        public void AddDiscoveryEntry(object o)
        {
            //lstDiscoveredDevices.Items.Add(o);
            listView1.Items.Add(new ListViewItem(((string)(o)).Split('\n')));
        }

        public void ReceiveCallback(IAsyncResult ar)
        {
            UdpState MyUDP = (UdpState)ar.AsyncState;

            // Obtain the UDP message body and convert it to a string, with remote IP address attached as well
            string ReceiveString = Encoding.ASCII.GetString(MyUDP.UDPClient.EndReceive(ar, ref MyUDP.EP));
            ReceiveString = MyUDP.EP.Address.ToString() + "\n" + ReceiveString.Replace("\r\n", "\n");

            // Configure the UdpClient class to accept more messages, if they arrive
            MyUDP.UDPClient.BeginReceive(ReceiveCallback, MyUDP);

            // Write the received UDP message text to the listbox in a thread-safe manner
            //lstDiscoveredDevices.Invoke(new AddTolstDiscoveredDevices(AddDiscoveryEntry), ReceiveString);
            listView1.Invoke(new AddTolstDiscoveredDevices(AddDiscoveryEntry), ReceiveString);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                GlobalUDP.UDPClient = new UdpClient();
                GlobalUDP.EP = new System.Net.IPEndPoint(System.Net.IPAddress.Parse("255.255.255.255"), 30303);
                System.Net.IPEndPoint BindEP = new System.Net.IPEndPoint(System.Net.IPAddress.Any, 30303);
                byte[] DiscoverMsg = Encoding.ASCII.GetBytes("Discovery: Who is out there?");

                // Set the local UDP port to listen on
                GlobalUDP.UDPClient.Client.Bind(BindEP);

                // Enable the transmission of broadcast packets without having them be received by ourself
                GlobalUDP.UDPClient.EnableBroadcast = true;
                GlobalUDP.UDPClient.MulticastLoopback = false;

                // Configure ourself to receive discovery responses
                GlobalUDP.UDPClient.BeginReceive(ReceiveCallback, GlobalUDP);

                // Transmit the discovery request message
                GlobalUDP.UDPClient.Send(DiscoverMsg, DiscoverMsg.Length, new System.Net.IPEndPoint(System.Net.IPAddress.Parse("255.255.255.255"), 30303));
            }
            catch
            {
                MessageBox.Show("Unable to transmit discovery message.  Check network connectivity and ensure that no other instances of this program are running.", "Error", MessageBoxButtons.OK);
                return;
            }
        }

        private void listView1_ItemActivate(object sender, EventArgs e)
        {
            System.Diagnostics.Process.Start("http://" + listView1.SelectedItems[0].Text);
        }
    }
}

我怎样才能做到iOS和Objective C?

How can i do it with iOS and Objective C?

谢谢

推荐答案

你可以开始从这里进行设备发现

You can start from here for device discovery

https://github.com / cybergarage / Cyber​​Link4C

这篇关于iOS Microchip以太网Discoverer的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆