wxr
2023-11-08 d099a65ce3f5f8ed9ba345f8f3bdcf617fa4af75
HDL_ON/DAL/DriverLayer/UdpSocket.cs
@@ -1,4 +1,222 @@
using 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>
//      /// 当前的Socket是否运行
//      /// </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;
@@ -45,13 +263,15 @@
            busSocket = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            busSocket.EnableBroadcast = true;
            try {
         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){
         catch (Exception ex)
         {
            MainPage.Log ($"udp port bind error : {ex.Message}");
            busSocket = null;
@@ -97,6 +317,8 @@
         }
      }
      byte []receiveBytes = new byte[2000];
      /// <summary>
      /// 开始异步接收数据
      /// </summary>
@@ -111,11 +333,17 @@
            return;
            }
            try {
                Packet packet = new Packet ();
                busSocket.BeginReceiveFrom (packet.Bytes, 0, packet.Bytes.Length, SocketFlags.None, ref packet.RemoteEndPoint, new AsyncCallback (asyncEndReceive), packet);
         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) {
         catch (Exception e)
         {
                System.Threading.Thread.Sleep (1);
                Console.WriteLine("asyncBeginReceive " + relinkCount   );
            if (relinkCount == 0)
@@ -209,9 +437,11 @@
         {
            int bytesSent = busSocket.EndSendTo(iar);
         }
         catch {
         catch
         {
            
            }
      }
   }
}