55 lines
1.7 KiB
C#
55 lines
1.7 KiB
C#
using System;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Net.NetworkInformation;
|
|
using System.Net.Sockets;
|
|
using System.Text;
|
|
using System.Threading;
|
|
|
|
namespace Inspectron.HawkEye.Protocol.Discovery
|
|
{
|
|
public class DiscoveryServer
|
|
{
|
|
private UdpClient _server;
|
|
private byte[] _name;
|
|
|
|
public DiscoveryServer(int port,string name=null)
|
|
{
|
|
_server = new UdpClient(port);
|
|
|
|
if(name==null)
|
|
{ _name = Encoding.UTF8.GetBytes( NetworkInterface
|
|
.GetAllNetworkInterfaces()
|
|
.Where(nic => nic.OperationalStatus == OperationalStatus.Up && nic.NetworkInterfaceType != NetworkInterfaceType.Loopback)
|
|
.Select(nic => nic.GetPhysicalAddress().ToString())
|
|
.FirstOrDefault());
|
|
|
|
}
|
|
else
|
|
{
|
|
_name = Encoding.UTF8.GetBytes(name);
|
|
}
|
|
|
|
}
|
|
|
|
public void Start()
|
|
{
|
|
Thread th = new Thread(DiscoveryLoop);
|
|
th.Start();
|
|
}
|
|
private void DiscoveryLoop()
|
|
{
|
|
while (true)
|
|
{
|
|
var clientEp = new IPEndPoint(IPAddress.Any, 0);
|
|
var clientRequestData = _server.Receive(ref clientEp);
|
|
var clientRequest = Encoding.ASCII.GetString(clientRequestData);
|
|
|
|
Console.WriteLine("Recived {0} from {1}, sending response", clientRequest, clientEp.Address.ToString());
|
|
_server.Send(_name, _name.Length, clientEp);
|
|
_server.Send(_name, _name.Length, clientEp);
|
|
_server.Send(_name, _name.Length, clientEp);
|
|
}
|
|
}
|
|
}
|
|
} |