LumiSoft.Net是一个封装的网络协议库,在UDP Socket编程中,使用了多线程和封装消息队列,并通过事件委托来处理接受消息或错误的异常Exception
public class UDPService{
LumiSoft.Net.UDP.UDP_Server udp = null;
public UDPService(System.Net.IPEndPoint sIPEndPoint)
{
udp = new LumiSoft.Net.UDP.UDP_Server();
udp.MTU = 2046;
udp.ProcessMode = LumiSoft.Net.UDP.UDP_ProcessMode.Parallel;
udp.Bindings = new System.Net.IPEndPoint[] {sIPEndPoint };
udp.PacketReceived += new LumiSoft.Net.UDP.PacketReceivedHandler(udp_PacketReceived);
udp.Error += new LumiSoft.Net.ErrorEventHandler(udp_Error);
udp.Start();
udp_IPAddress = sIPEndPoint.Address;
udp_port = sIPEndPoint.Port;
}
void PacketReceived(LumiSoft.Net.UDP.UDP_PacketEventArgs e){
//e.Data 收到的信息或数据在这里处理
//如果在此调用界面控件,请使用委托处理
}
#region 处理UDP过程中的异常
/// <summary>
/// 处理UDP过程中的异常
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void udp_Error(object sender, LumiSoft.Net.Error_EventArgs e)
{
//e.Exception ;ErrorCode = 10054
// e.StackTrace
if (e.Exception != null)
{
CMS_LAN_2_0.DebugTracker.Tracker.AddSystemException(e.Exception);
if (e.Exception is System.Net.Sockets.SocketException)
{
SocketException se = e.Exception as SocketException;
if (se.ErrorCode == 10054)
{
System.Windows.Forms.MessageBox.Show
("Can't send command ,device closed or restarted.", "Connect failed",
System.Windows.Forms.MessageBoxButtons.OK,
System.Windows.Forms.MessageBoxIcon.Warning);
}
else
{
System.Windows.Forms.MessageBox.Show(e.Exception.ToString(), e.Text);
}
}
else
{
System.Windows.Forms.MessageBox.Show(e.Exception.ToString(), e.Text);
}
}
}
#endregion
}
-----------------------------------------------------------------------------------------------------------------------