使用windows服务作为宿主,
windows服务代码:
public partial class KFService : ServiceBase
{
NetWorkProcess.NWProcess nw;
public KFService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
int lisenport = 35868;
int sendport = 35869;
int lisenport_B = 35867;
string _VID = "";
string _PID = "";
//本机IP
IPEndPoint ip = new IPEndPoint(IPAddress.Any, lisenport);
IPEndPoint ip_B = new IPEndPoint(IPAddress.Any, lisenport_B);
nw = new NetWorkProcess.NWProcess(ip, ip_B, sendport);
nw.Start();
}
protected override void OnStop()
{
if (nw != null)
nw.Stop();
nw = null;
}
}
网络处理类
public class NWProcess
{
int receivecount = 0;
private IPEndPoint _listenIP;
private IPEndPoint _listenIP_B;
private Thread _listenThread;
private Thread _listenThread_B;
private static object _synobj = new object();
private bool _apprun = false;
UdpClient _udplistener;
UdpClient _udplistener_B;
int _sendport = 35869;
string _reporthead = "A55ACBBC";
/// <summary>
/// 要侦听的网络地址
/// </summary>
/// <param name="IP"></param>
public NWProcess(IPEndPoint IP, IPEndPoint IP_B, int sendport)
{
_listenIP = IP;
_listenIP_B = IP_B;
_sendport = sendport;
}
/// <summary>
/// 启动侦听
/// </summary>
public void Start()
{
_apprun = true;
_listenThread = new Thread(new ThreadStart(StartListen));
_listenThread.Start();
_listenThread_B = new Thread(new ThreadStart(StartListen_B));
_listenThread_B.Start();
}
private void StartListen()
{
try
{
_udplistener = new UdpClient(_listenIP);
while (_apprun)
{
try
{
IPEndPoint rip = new IPEndPoint(IPAddress.Any, 0);
byte[] buf = _udplistener.Receive(ref rip);
rip.Port = _sendport;
WritLogFile.Log.WriteFile(string.Format("接收消息{2}IP:{0};Message:{1}", rip.Address.ToString(), BitConverter.ToString(buf), DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff")));
NetDataProcess.Process(buf, rip);//数据发送走进行处理
}
catch (Exception ex)
{
WritLogFile.Log.WriteFile("NWProcess.StartListen():" + ex.Message);
}
}
}
catch (Exception ex)
{
WritLogFile.Log.WriteFile("NWProcess.StartListen():" + ex.Message);
}
}
private void StartListen_B()
{
try
{
_udplistener_B = new UdpClient(_listenIP_B);
while (_apprun)
{
try
{
IPEndPoint rip = new IPEndPoint(IPAddress.Any, 0);
byte[] buf = _udplistener_B.Receive(ref rip);
rip.Port = _sendport;
WritLogFile.Log.WriteFile(string.Format("接收消息{2}IP:{0};Message:{1}", rip.Address.ToString(), BitConverter.ToString(buf), DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff")));
NetDataProcess.Process(buf, rip);
}
catch (Exception ex)
{
WritLogFile.Log.WriteFile("NWProcess.StartListen():" + ex.Message);
}
}
}
catch (Exception ex)
{
WritLogFile.Log.WriteFile("NWProcess.StartListen():" + ex.Message);
}
}
/// <summary>
/// 停止侦听
/// </summary>
public void Stop()
{
_apprun = false;
try
{
if (_udplistener != null)
_udplistener.Close();
_udplistener = null;
if (_udplistener_B != null)
_udplistener_B.Close();
_udplistener_B = null;
}
catch
{ }
try
{
if (_listenThread != null)
_listenThread.Abort();
_listenThread = null;
if (_listenThread_B != null)
_listenThread_B.Abort();
_listenThread_B = null;
}
catch { }
}
}
UDP回复
UdpClient client = new UdpClient();
byte[] buf = En_DecryptClass.Encrypt(Sendbuf.ToArray());
client.Send(buf, buf.Length, ip);