Пример #1
0
        /// <summary>
        /// 发送消息
        /// </summary>
        /// <param name="value"></param>
        /// <param name="receiveMessage"></param>
        /// <returns></returns>
        public static bool UdpSend(this Message value, Action <Message> receiveMessage = null)
        {
            bool      isOk      = false;
            UdpClient udpClient = new UdpClient();

            try
            {
                byte[] bData = value.ConvertToBytes();
                udpClient.Send(bData, bData.Length);
                if (receiveMessage != null)
                {
                    IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 0);
                    byte[]     rData    = udpClient.Receive(ref endPoint);
                    Message    message  = rData.ConvertToObject <Message>();
                    receiveMessage(message);
                }
            }
            catch (Exception ex)
            {
                ex.ToString().WriteToLog();
                ex.ToString();
            }
            finally
            {
                udpClient.Close();
                udpClient = null;
            }
            GC.Collect();
            return(isOk);
        }
Пример #2
0
 /// <summary>
 /// 发送消息异步处理
 /// </summary>
 /// <param name="value"></param>
 /// <param name="receiveMessage"></param>
 /// <returns></returns>
 public static void TcpSendAsync(this Message value, Action <Message> receiveMessage = null)
 {
     Task.Factory.StartNew(() =>
     {
         try
         {
             TcpClient tcpClient = new TcpClient();
             tcpClient.Connect(value.IP, value.Port);
             NetworkStream ns = tcpClient.GetStream();
             byte[] bData     = value.ConvertToBytes();
             ns.BeginWrite(bData, 0, bData.Length, o =>
             {
                 NetworkStream networks = o.AsyncState as NetworkStream;
                 networks.EndWrite(o);
                 networks.Flush();
                 if (receiveMessage != null)
                 {
                     MemoryStream ms = new MemoryStream();
                     byte[] brData   = new byte[1024];
                     int length      = 0;
                     while ((length = networks.Read(brData, 0, brData.Length)) > 0)
                     {
                         ms.Write(brData, 0, length);
                     }
                     byte[] bValue   = ms.ToArray();
                     Message message = bValue.ConvertToObject <Message>();
                     System.Windows.Application.Current.Dispatcher.Invoke(new Action(() =>
                     {
                         receiveMessage(message);
                     }));
                     ms.Close();
                     ms.Dispose();
                     ms = null;
                 }
                 networks.Close();
                 networks.Dispose();
                 networks = null;
                 tcpClient.Close();
                 tcpClient = null;
             }, ns);
         }
         catch (Exception ex)
         {
             ex.ToString().WriteToLog(log4net.Core.Level.Error);
         }
         GC.Collect();
     });
 }
Пример #3
0
        /// <summary>
        /// 发送消息
        /// </summary>
        /// <param name="value"></param>
        /// <param name="receiveMessage"></param>
        /// <returns></returns>
        public static bool TcpSend(this Message value, Action <Message> receiveMessage = null)
        {
            bool isOk = false;

            try
            {
                TcpClient tcpClient = new TcpClient();
                tcpClient.Connect(value.IP, value.Port);
                NetworkStream ns    = tcpClient.GetStream();
                byte[]        bData = value.ConvertToBytes();
                ns.Write(bData, 0, bData.Length);
                ns.Flush();
                if (receiveMessage != null)
                {
                    MemoryStream ms     = new MemoryStream();
                    byte[]       brData = new byte[1024];
                    int          length = 0;
                    while ((length = ns.Read(brData, 0, brData.Length)) > 0)
                    {
                        ms.Write(brData, 0, length);
                    }
                    byte[]  bValue  = ms.ToArray();
                    Message message = bValue.ConvertToObject <Message>();
                    receiveMessage(message);

                    ms.Close();
                    ms.Dispose();
                    ms = null;
                }
                ns.Close();
                ns.Dispose();
                ns = null;
                tcpClient.Close();
                tcpClient = null;
                isOk      = true;
            }
            catch (Exception ex)
            {
                ex.ToString().WriteToLog();
                ex.ToString();
            }
            GC.Collect();
            return(isOk);
        }
Пример #4
0
 /// <summary>
 /// 发送消息异步处理
 /// </summary>
 /// <param name="value"></param>
 /// <param name="receiveMessage"></param>
 /// <returns></returns>
 public static void UdpSendAsync(this Message value, Action <Message> receiveMessage = null)
 {
     try
     {
         UdpClient udpClient = new UdpClient();
         byte[]    bData     = value.ConvertToBytes();
         udpClient.BeginSend(bData, bData.Length, o =>
         {
             try
             {
                 UdpClient udpClientSend = o.AsyncState as UdpClient;
                 if (receiveMessage != null)
                 {
                     IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 0);
                     byte[] rData        = udpClientSend.Receive(ref endPoint);
                     Message message     = rData.ConvertToObject <Message>();
                     System.Windows.Application.Current.Dispatcher.Invoke(new Action(() =>
                     {
                         receiveMessage(message);
                     }));
                 }
                 udpClientSend.Close();
             }
             catch (Exception ex)
             {
                 ex.ToString().WriteToLog();
                 ex.ToString();
             }
         }, udpClient);
     }
     catch (Exception ex)
     {
         ex.ToString().WriteToLog();
         ex.ToString();
     }
     GC.Collect();
 }