SafeNet/SafeNetLib/UdpServer.cs

99 lines
2.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Threading;
using System.Net;
namespace SafeNetLib
{
public class UdpServer
{
private UdpClient udpClient;
private Thread listenThread;
private int port;
private bool working = false;
private IPEndPoint sourceEP;
public UdpServer(int _port)
{
udpClient = null;
port = _port;
sourceEP = new IPEndPoint(IPAddress.Any, 0);
}
public void Start()
{
Console.WriteLine("Starting UDP server on port:"+port);
working = true;
udpClient = new UdpClient(port);
listenThread = new Thread(new ThreadStart(Listen));
listenThread.Start();
}
public void Stop()
{
Console.WriteLine("Stoping UDP server");
working = false;
if (udpClient != null)
{
udpClient.Close();
udpClient = null;
}
if (listenThread != null)
{
listenThread.Abort();
listenThread = null;
}
}
private void Listen()
{
byte[] data = new byte[1024];
while (working)
{
try
{
data = udpClient.Receive(ref sourceEP);
Console.WriteLine("Data recv from: " + sourceEP.Address.ToString());
if (this.OnNewDataRecv != null)
this.OnNewDataRecv(data, data.Length, sourceEP.Address);
if (this.OnNewDataEndPointRecv != null)
this.OnNewDataEndPointRecv(data, data.Length, sourceEP);
}
catch (Exception ex)
{
Console.WriteLine("ERROR UDPserver recv \n"+ ex.ToString());
}
}
}
public delegate void dataRecvDel(byte[] data, int dataLen, IPAddress ip);
public event dataRecvDel OnNewDataRecv;
public delegate void dataRecvEndPointDel(byte[] data, int dataLen, IPEndPoint ip);
public event dataRecvEndPointDel OnNewDataEndPointRecv;
public void Send(byte[] data, int dataLen, IPEndPoint EP)
{
if (udpClient != null)
{
udpClient.Send(data, dataLen, EP);
}
else
{
Console.WriteLine("ERRROR sending on UDP to:" + EP.Address.ToString());
}
}
}
}