From 488cf7d591dc7400ed5c7f116af7005396c666e2 Mon Sep 17 00:00:00 2001 From: wxr <464027401@qq.com> Date: 星期三, 03 一月 2024 17:12:17 +0800 Subject: [PATCH] Merge branch 'wjc' into Dev-Branch-2024 --- HDL_ON/DAL/DriverLayer/UdpSocket.cs | 326 ++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 278 insertions(+), 48 deletions(-) diff --git a/HDL_ON/DAL/DriverLayer/UdpSocket.cs b/HDL_ON/DAL/DriverLayer/UdpSocket.cs index df9662a..50ceeac 100644 --- a/HDL_ON/DAL/DriverLayer/UdpSocket.cs +++ b/HDL_ON/DAL/DriverLayer/UdpSocket.cs @@ -1,4 +1,222 @@ -锘縰sing System; +锘�//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; using System.Net.Sockets; using System.Net; @@ -8,16 +226,16 @@ { static UdpSocket _busSocket; public static UdpSocket _BusSocket - { - get - { - if(_busSocket == null) - { + { + get + { + if (_busSocket == null) + { _busSocket = new UdpSocket(); - } + } return _busSocket; - } - } + } + } //鏈湴Socket private Socket busSocket; @@ -25,53 +243,55 @@ /// <summary> /// 鍚姩Socket鎺ユ敹鍜屽彂閫佸姛鑳� /// </summary> - public void Start (int port = 0) - { + public void Start(int port = 0) + { if (IsRunning) { if (port == Port) - { - return; + { + return; } - else - { - busSocket.Close(); + 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 = 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}"); + catch (Exception ex) + { + MainPage.Log($"udp port bind error : {ex.Message}"); busSocket = null; - return; - } + return; + } - asyncBeginReceive(); + asyncBeginReceive(); - MainPage.Log ($"udp port : {port}"); - } + MainPage.Log($"udp port : {port}"); + } /// <summary> /// 鍋滄Socket /// </summary> public void Stop() { - if(busSocket == null) - { + if (busSocket == null) + { return; - } + } if (!IsRunning) { return; @@ -97,6 +317,8 @@ } } + byte []receiveBytes = new byte[2000]; + /// <summary> /// 寮�濮嬪紓姝ユ帴鏀舵暟鎹� /// </summary> @@ -106,29 +328,35 @@ { return; } - if(busSocket == null) - { + 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 ); + 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}"); - } + Console.WriteLine($"asyncBeginReceive {e.Message}"); + } } /// <summary> - /// 閲嶈繛娆℃暟 - /// </summary> + /// 閲嶈繛娆℃暟 + /// </summary> private int relinkCount = 0; @@ -209,9 +437,11 @@ { int bytesSent = busSocket.EndSendTo(iar); } - catch { - - } + catch + { + + } } } -} \ No newline at end of file +} + -- Gitblit v1.8.0