From 413e7024c298d7c04d425c8a1970613b2b37b619 Mon Sep 17 00:00:00 2001 From: wxr <464027401@qq.com> Date: 星期三, 03 一月 2024 17:18:16 +0800 Subject: [PATCH] Update UdpSocket.cs --- HDL_ON/DAL/DriverLayer/UdpSocket.cs | 621 ++++++++++++++++++-------------------------------------- 1 files changed, 198 insertions(+), 423 deletions(-) diff --git a/HDL_ON/DAL/DriverLayer/UdpSocket.cs b/HDL_ON/DAL/DriverLayer/UdpSocket.cs index 50ceeac..c4b37fd 100644 --- a/HDL_ON/DAL/DriverLayer/UdpSocket.cs +++ b/HDL_ON/DAL/DriverLayer/UdpSocket.cs @@ -1,447 +1,222 @@ -锘�//using System; -//using System.Net.Sockets; -//using System.Net; - -//namespace HDL_ON.DriverLayer -//{ -// public class UdpSocket -// { -// static UdpSocket _busSocket; -// public static UdpSocket _BusSocket -// { -// get -// { -// if(_busSocket == null) -// { -// _busSocket = new UdpSocket(); -// } -// return _busSocket; -// } -// } - -// //鏈湴Socket -// private Socket busSocket; -// public int Port = 0; -// /// <summary> -// /// 鍚姩Socket鎺ユ敹鍜屽彂閫佸姛鑳� -// /// </summary> -// public void Start (int port = 0) -// { -// if (IsRunning) -// { -// if (port == Port) -// { -// return; -// } -// else -// { -// busSocket.Close(); -// } -// } -// if (port != 0) -// Port = port; -// if (Port == 0) -// return; - -// busSocket = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); -// busSocket.EnableBroadcast = true; -// try { -// busSocket.Bind(new IPEndPoint(IPAddress.Any, Port)); - -// busSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse("239.0.168.188"))); -// relinkCount = 0; -// } -// catch (Exception ex){ -// MainPage.Log ($"udp port bind error : {ex.Message}"); - -// busSocket = null; -// return; -// } - -// asyncBeginReceive(); - -// MainPage.Log ($"udp port : {port}"); -// } - -// /// <summary> -// /// 鍋滄Socket -// /// </summary> -// public void Stop() -// { -// if(busSocket == null) -// { -// return; -// } -// if (!IsRunning) -// { -// return; -// } -// try -// { -// busSocket.Close(); -// relinkCount = 0; -// } -// catch { } -// busSocket = null; -// MainPage.Log("Socket鍏抽棴"); -// } - -// /// <summary> -// /// 褰撳墠鐨凷ocket鏄惁杩愯 -// /// </summary> -// public bool IsRunning -// { -// get -// { -// return null == busSocket ? false : true; -// } -// } - -// /// <summary> -// /// 寮�濮嬪紓姝ユ帴鏀舵暟鎹� -// /// </summary> -// private void asyncBeginReceive() -// { -// if (!IsRunning) -// { -// return; -// } -// if(busSocket == null) -// { -// return; -// } - -// try { -// Packet packet = new Packet (); -// busSocket.BeginReceiveFrom (packet.Bytes, 0, packet.Bytes.Length, SocketFlags.None, ref packet.RemoteEndPoint, new AsyncCallback (asyncEndReceive), packet); -// } -// catch (Exception e) { -// System.Threading.Thread.Sleep (1); -// Console.WriteLine("asyncBeginReceive " + relinkCount ); -// if (relinkCount == 0) -// { -// relinkCount = 1; -// asyncBeginReceive(); -// } -// Console.WriteLine($"asyncBeginReceive {e.Message}"); -// } -// } -// /// <summary> -// /// 閲嶈繛娆℃暟 -// /// </summary> -// private int relinkCount = 0; - - - -// /// <summary> -// /// 寮傛鎺ユ敹鏁版嵁缁撴潫 -// /// </summary> -// /// <param name="iar"></param> -// private void asyncEndReceive(IAsyncResult iar) -// { -// if (!IsRunning) -// { -// return; -// } -// try -// { -// if (busSocket == null) -// { -// return; -// } -// asyncBeginReceive(); -// Packet packet = (Packet)iar.AsyncState; -// int len = busSocket.EndReceiveFrom(iar, ref packet.RemoteEndPoint); - -// byte[] bytes = packet.Bytes; -// packet.Bytes = new byte[len]; -// Array.Copy(bytes, 0, packet.Bytes, 0, packet.Bytes.Length); - -// //MainPage.Log($"鎺ユ敹{packet.RemoteEndPoint}鏁版嵁"); -// //mqtt杩炴帴鏁版嵁璇诲彇 A鍗忚缃戠粶璁惧淇℃伅璇诲彇鍥炲 澶勭悊 -// if (((IPEndPoint)packet.RemoteEndPoint).Port == 8585) -// { -// Control.Ins.ConvertReceiveData(bytes, ((IPEndPoint)packet.RemoteEndPoint).Address.ToString()); -// } -// else if (((IPEndPoint)packet.RemoteEndPoint).Port == 6000)//澶勭悊bus 6000绔彛鐨勬暟鎹� -// { -// packet.Manager(); -// } - -// } -// catch (Exception ex) -// { -// MainPage.Log($"寮傛鎺ユ敹鏁版嵁缁撴潫 {ex.Message},{((Packet)iar.AsyncState).Bytes}"); -// } -// } - -// /// <summary> -// /// 寮傛鍙戦�佹暟鎹� -// /// </summary> -// /// <param name="tempPacket"></param> -// public void AsyncBeginSend(Packet tempPacket) -// { -// try -// { -// if (!IsRunning) -// { -// tempPacket.HaveSendCount++; -// return; -// } -// tempPacket.FlagDateTime = System.DateTime.Now; -// tempPacket.HaveSendCount++; -// busSocket.BeginSendTo(tempPacket.Bytes, 0, tempPacket.Bytes.Length, SocketFlags.None, tempPacket.RemoteEndPoint, new AsyncCallback(asyncEndSend), tempPacket); -// } -// catch (Exception ex) -// { -// MainPage.Log($"AsyncBeginSend error {ex.Message}"); -// } -// } - -// /// <summary> -// /// 寮傛鍙戦�佹暟鎹粨鏉� -// /// </summary> -// /// <param name="iar"></param> -// private void asyncEndSend(IAsyncResult iar) -// { -// Packet tempUDPPacketBuffer = (Packet)iar.AsyncState; -// try -// { -// int bytesSent = busSocket.EndSendTo(iar); -// } -// catch { - -// } -// } -// } -//} - -using System; +锘縰sing System; using System.Net.Sockets; using System.Net; namespace HDL_ON.DriverLayer { - public class UdpSocket - { - static UdpSocket _busSocket; - public static UdpSocket _BusSocket - { - get - { - if (_busSocket == null) - { - _busSocket = new UdpSocket(); - } - return _busSocket; - } - } + public class UdpSocket + { + static UdpSocket _busSocket; + public static UdpSocket _BusSocket + { + get + { + if (_busSocket == null) + { + _busSocket = new UdpSocket(); + } + return _busSocket; + } + } - //鏈湴Socket - private Socket busSocket; - public int Port = 0; - /// <summary> - /// 鍚姩Socket鎺ユ敹鍜屽彂閫佸姛鑳� - /// </summary> - public void Start(int port = 0) - { - if (IsRunning) - { - if (port == Port) - { - return; - } - else - { - busSocket.Close(); - } - } - if (port != 0) - Port = port; - if (Port == 0) - return; + //鏈湴Socket + private Socket busSocket; + public int Port = 0; + /// <summary> + /// 鍚姩Socket鎺ユ敹鍜屽彂閫佸姛鑳� + /// </summary> + public void Start(int port = 0) + { + if (IsRunning) + { + if (port == Port) + { + return; + } + else + { + busSocket.Close(); + } + } + if (port != 0) + Port = port; + if (Port == 0) + return; - busSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); - busSocket.EnableBroadcast = true; - try - { - busSocket.Bind(new IPEndPoint(IPAddress.Any, Port)); + busSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); + busSocket.EnableBroadcast = true; + try + { + busSocket.Bind(new IPEndPoint(IPAddress.Any, Port)); - busSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse("239.0.168.188"))); - relinkCount = 0; - } - catch (Exception ex) - { - MainPage.Log($"udp port bind error : {ex.Message}"); + busSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse("239.0.168.188"))); + relinkCount = 0; + } + catch (Exception ex) + { + MainPage.Log($"udp port bind error : {ex.Message}"); - busSocket = null; - return; - } + busSocket = null; + return; + } - asyncBeginReceive(); + asyncBeginReceive(); - MainPage.Log($"udp port : {port}"); - } + MainPage.Log($"udp port : {port}"); + } - /// <summary> - /// 鍋滄Socket - /// </summary> - public void Stop() - { - if (busSocket == null) - { - return; - } - if (!IsRunning) - { - return; - } - try - { - busSocket.Close(); - relinkCount = 0; - } - catch { } - busSocket = null; - MainPage.Log("Socket鍏抽棴"); - } + /// <summary> + /// 鍋滄Socket + /// </summary> + public void Stop() + { + if (busSocket == null) + { + return; + } + if (!IsRunning) + { + return; + } + try + { + busSocket.Close(); + relinkCount = 0; + } + catch { } + busSocket = null; + MainPage.Log("Socket鍏抽棴"); + } - /// <summary> - /// 褰撳墠鐨凷ocket鏄惁杩愯 - /// </summary> - public bool IsRunning - { - get - { - return null == busSocket ? false : true; - } - } + /// <summary> + /// 褰撳墠鐨凷ocket鏄惁杩愯 + /// </summary> + public bool IsRunning + { + get + { + return null == busSocket ? false : true; + } + } - byte []receiveBytes = new byte[2000]; + /// <summary> + /// 寮�濮嬪紓姝ユ帴鏀舵暟鎹� + /// </summary> + private void asyncBeginReceive() + { + if (!IsRunning) + { + return; + } + if (busSocket == null) + { + return; + } - /// <summary> - /// 寮�濮嬪紓姝ユ帴鏀舵暟鎹� - /// </summary> - private void asyncBeginReceive() - { - if (!IsRunning) - { - return; - } - if (busSocket == null) - { - return; - } - - try - { - int len = busSocket.Receive(receiveBytes, SocketFlags.None); - - Packet packet = new Packet(len); - - System.Array.Copy(receiveBytes, packet.Bytes, len); - packet.Manager(); - } - catch (Exception e) - { - System.Threading.Thread.Sleep(1); - Console.WriteLine("asyncBeginReceive " + relinkCount); - if (relinkCount == 0) - { - relinkCount = 1; - asyncBeginReceive(); - } - Console.WriteLine($"asyncBeginReceive {e.Message}"); - } - } - /// <summary> - /// 閲嶈繛娆℃暟 - /// </summary> - private int relinkCount = 0; + try + { + Packet packet = new Packet(); + busSocket.BeginReceiveFrom(packet.Bytes, 0, packet.Bytes.Length, SocketFlags.None, ref packet.RemoteEndPoint, new AsyncCallback(asyncEndReceive), packet); + } + catch (Exception e) + { + System.Threading.Thread.Sleep(1); + Console.WriteLine("asyncBeginReceive " + relinkCount); + if (relinkCount == 0) + { + relinkCount = 1; + asyncBeginReceive(); + } + Console.WriteLine($"asyncBeginReceive {e.Message}"); + } + } + /// <summary> + /// 閲嶈繛娆℃暟 + /// </summary> + private int relinkCount = 0; - /// <summary> - /// 寮傛鎺ユ敹鏁版嵁缁撴潫 - /// </summary> - /// <param name="iar"></param> - private void asyncEndReceive(IAsyncResult iar) - { - if (!IsRunning) - { - return; - } - try - { - if (busSocket == null) - { - return; - } - asyncBeginReceive(); - Packet packet = (Packet)iar.AsyncState; - int len = busSocket.EndReceiveFrom(iar, ref packet.RemoteEndPoint); + /// <summary> + /// 寮傛鎺ユ敹鏁版嵁缁撴潫 + /// </summary> + /// <param name="iar"></param> + private void asyncEndReceive(IAsyncResult iar) + { + if (!IsRunning) + { + return; + } + try + { + if (busSocket == null) + { + return; + } + asyncBeginReceive(); + Packet packet = (Packet)iar.AsyncState; + int len = busSocket.EndReceiveFrom(iar, ref packet.RemoteEndPoint); - byte[] bytes = packet.Bytes; - packet.Bytes = new byte[len]; - Array.Copy(bytes, 0, packet.Bytes, 0, packet.Bytes.Length); + byte[] bytes = packet.Bytes; + packet.Bytes = new byte[len]; + Array.Copy(bytes, 0, packet.Bytes, 0, packet.Bytes.Length); - //MainPage.Log($"鎺ユ敹{packet.RemoteEndPoint}鏁版嵁"); - //mqtt杩炴帴鏁版嵁璇诲彇 A鍗忚缃戠粶璁惧淇℃伅璇诲彇鍥炲 澶勭悊 - if (((IPEndPoint)packet.RemoteEndPoint).Port == 8585) - { - Control.Ins.ConvertReceiveData(bytes, ((IPEndPoint)packet.RemoteEndPoint).Address.ToString()); - } - else if (((IPEndPoint)packet.RemoteEndPoint).Port == 6000)//澶勭悊bus 6000绔彛鐨勬暟鎹� - { - packet.Manager(); - } + //MainPage.Log($"鎺ユ敹{packet.RemoteEndPoint}鏁版嵁"); + //mqtt杩炴帴鏁版嵁璇诲彇 A鍗忚缃戠粶璁惧淇℃伅璇诲彇鍥炲 澶勭悊 + if (((IPEndPoint)packet.RemoteEndPoint).Port == 8585) + { + Control.Ins.ConvertReceiveData(bytes, ((IPEndPoint)packet.RemoteEndPoint).Address.ToString()); + } + else if (((IPEndPoint)packet.RemoteEndPoint).Port == 6000)//澶勭悊bus 6000绔彛鐨勬暟鎹� + { + packet.Manager(); + } - } - catch (Exception ex) - { - MainPage.Log($"寮傛鎺ユ敹鏁版嵁缁撴潫 {ex.Message},{((Packet)iar.AsyncState).Bytes}"); - } - } + } + catch (Exception ex) + { + MainPage.Log($"寮傛鎺ユ敹鏁版嵁缁撴潫 {ex.Message},{((Packet)iar.AsyncState).Bytes}"); + } + } - /// <summary> - /// 寮傛鍙戦�佹暟鎹� - /// </summary> - /// <param name="tempPacket"></param> - public void AsyncBeginSend(Packet tempPacket) - { - try - { - if (!IsRunning) - { - tempPacket.HaveSendCount++; - return; - } - tempPacket.FlagDateTime = System.DateTime.Now; - tempPacket.HaveSendCount++; - busSocket.BeginSendTo(tempPacket.Bytes, 0, tempPacket.Bytes.Length, SocketFlags.None, tempPacket.RemoteEndPoint, new AsyncCallback(asyncEndSend), tempPacket); - } - catch (Exception ex) - { - MainPage.Log($"AsyncBeginSend error {ex.Message}"); - } - } + /// <summary> + /// 寮傛鍙戦�佹暟鎹� + /// </summary> + /// <param name="tempPacket"></param> + public void AsyncBeginSend(Packet tempPacket) + { + try + { + if (!IsRunning) + { + tempPacket.HaveSendCount++; + return; + } + tempPacket.FlagDateTime = System.DateTime.Now; + tempPacket.HaveSendCount++; + busSocket.BeginSendTo(tempPacket.Bytes, 0, tempPacket.Bytes.Length, SocketFlags.None, tempPacket.RemoteEndPoint, new AsyncCallback(asyncEndSend), tempPacket); + } + catch (Exception ex) + { + MainPage.Log($"AsyncBeginSend error {ex.Message}"); + } + } - /// <summary> - /// 寮傛鍙戦�佹暟鎹粨鏉� - /// </summary> - /// <param name="iar"></param> - private void asyncEndSend(IAsyncResult iar) - { - Packet tempUDPPacketBuffer = (Packet)iar.AsyncState; - try - { - int bytesSent = busSocket.EndSendTo(iar); - } - catch - { + /// <summary> + /// 寮傛鍙戦�佹暟鎹粨鏉� + /// </summary> + /// <param name="iar"></param> + private void asyncEndSend(IAsyncResult iar) + { + Packet tempUDPPacketBuffer = (Packet)iar.AsyncState; + try + { + int bytesSent = busSocket.EndSendTo(iar); + } + catch + { - } - } - } -} - + } + } + } +} \ No newline at end of file -- Gitblit v1.8.0