我可以使用套接字this tutorial
发送/接收现在,我想在插入支持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进行操作?
谢谢