iOS Microchip以太网Discoverer

我可以在本教程中使用socket发送/接收

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

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

这是PC应用程序的开源:

 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做到这一点?

谢谢

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

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