zoukankan      html  css  js  c++  java
  • 简单 UDP 操作类

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Net;
    using System.Net.Sockets;
    using System.Threading;
    using System.Collections;
    
    namespace moniopter
    {
        public static class UDPManager
        {
            //本机名称和IP
            public static string ComputerName;
            public static string ComputerIP;
    
            public const int listenProt = 10318;//设置端口号
            static UdpClient listener = null;//提供的网络服务
            static Thread listenter = null;//创建一个监听消息的进程
            static bool islistenter;//是否要监听
            public static bool IsMsgReader;//消息是否已读
            static UDPManager()
            {
                IsMsgReader = true;
                ComputerName = Dns.GetHostName();
                ComputerIP = GetIPAddress();
                islistenter = true;
    
                //加下面这句是为了在开启线程中可以访问控件属性
                System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
                listenter = new Thread(StartListener);
                listenter.Start();
            }
    
            //关闭
            public static void Close()
            {
                if (listener == null)
                {
                    return;
                }
                try
                {
                    listener.Close();//关闭探听消息服务
                    listenter.Abort();//关闭监听消息进程
                }
                catch{  }
            }
    
            //获取IP
            private static string GetIPAddress()
            {
                string AddressIP = "";
                //第一种办法获取
                foreach (IPAddress _IPAddress in Dns.GetHostEntry(Dns.GetHostName()).AddressList)
                {
                    if (_IPAddress.AddressFamily.ToString().ToLower() == "internetwork")
                    {
                        return _IPAddress.ToString();
                    }
                }
                //第二种办法获取
                if (AddressIP == "")
                {
                    IPHostEntry myEntry = Dns.GetHostEntry(System.Net.Dns.GetHostName());
                    if (myEntry.AddressList.Length > 1)
                    {
                        if (myEntry.AddressList[0].ToString().IndexOf('.') > 0)
                        {
                            AddressIP = myEntry.AddressList[0].ToString();
                        }
                        else
                        {
                            AddressIP = myEntry.AddressList[1].ToString();
                        }
                        AddressIP = myEntry.AddressList[1].ToString();
                    }
                    else
                    {
                        AddressIP = myEntry.AddressList[0].ToString();
                    }
                }
                return AddressIP;
            }
    
            public delegate void Listenter(string UIP, string msg);
    
            public static event Listenter OnListenter; 
    
            //开始监听
            private static void StartListener()
            {
                listener = new UdpClient(listenProt); //使用UDP协议
                IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, listenProt); //任意IP,
                try
                {
                    while (islistenter)//处于监听状态
                    {
                        byte[] bytes = listener.Receive(ref groupEP);
                        string Uip = groupEP.Address.ToString();//发信人的IP
                        string strInfo = Encoding.GetEncoding("gb2312").GetString(bytes, 0,
                        bytes.Length);//获得信息
                        string[] msg = { Uip, strInfo };//放入ip,和内容
                        OnListenter(Uip, strInfo);
                    }
                }
                catch { }
                finally
                {
                    listener.Close();
                }
            }
    
            /// <summary>
            /// 发送消息 string
            /// </summary>
            /// <param name="msg"></param>
            /// <param name="ipStr"></param>
            public static void Send(string msg, string ipStr)
            {
                Socket s = new Socket(AddressFamily.InterNetwork,
                        SocketType.Dgram, ProtocolType.Udp);
                try
                {
                    IPAddress broadcast = IPAddress.Parse(ipStr);
                    byte[] sendbuf = Encoding.GetEncoding("gb2312").GetBytes(msg);
                    IPEndPoint ep = new IPEndPoint(broadcast, listenProt);
    
                    //65507 可发送最大byte  64512
                    if (sendbuf.Length <= 64512)
                    {
                        s.SendTo(sendbuf, ep);
                    }
                }
                catch { }
                finally
                {
                    s.Close();
                }
            }
    
        }
    }
    

      

  • 相关阅读:
    极光推送的的栗子
    老师oracle讲义第五天
    oracle学习第五天
    ajax使用
    jstl标签的使用
    json使用
    jsp的el表达式使用
    老师oracle讲义第三天
    oracle学习第一天
    oracle学习第二天
  • 原文地址:https://www.cnblogs.com/weloglog888/p/6667921.html
Copyright © 2011-2022 走看看