当前位置:编程学习 > C#/ASP.NET >>

哪位大神帮帮忙啊!急!!!!!!!!!!

public partial class UDPSocket : Component
    {
        private IPEndPoint ServerEndPoint = null;        //定义网络端点
        private UdpClient UDP_Server = new UdpClient();  //创建网络服务,即UDP的Socket
        private System.Threading.Thread thdUdp;          //创建一个线程
        public delegate void DataArrivalEventHandler(byte[] Data, IPAddress Ip, int Port);
        //通过托管在控件中定义一个事件
        public event DataArrivalEventHandler DataArrival;
        private string localHost = "127.0.0.1";  //设置默认的IP地址
        //在“属性”对话框中显示localHost属性
        [Browsable(true), Category("Local"), Description("本地IP地址")]
        public string LocalHost  //封装字段
        {
            get { return localHost; }
            set { localHost = value; }
        }
        private int localPort = 11000;  //设置默认端口号
        //在“属性”对话框中显示localPort属性
        [Browsable(true), Category("Local"), Description("本地端口号")]
        public int LocalPort  //封装字段
        {
            get { return localPort; }
            set { localPort = value; }
        }
        private bool active = false;
        //在“属性”对话框中显示active属性
        [Browsable(true), Category("Local"), Description("激活监听")]
        public bool Active
        {
            get { return active; }
            set
            {                        //该属性读取值
                active = value;
                if (active)          //当值为true时
                {
                    OpenSocket();    //打开监听
                }
                else
                {
                    CloseSocket();    //关闭监听
                }
            }
        }


        public UDPSocket()
        {
            InitializeComponent();
        }

        public UDPSocket(IContainer container)
        {
            container.Add(this);

            InitializeComponent();
        }

        private void OpenSocket()
        {
            Listener();                //调用监听方法
        }

        private void CloseSocket()
        {
            if (UDP_Server != null)   //当Socket不为空时
                UDP_Server.Close();   //关闭Socket
            if (thdUdp != null)       //如果子线程正在被使用
            {
                Thread.Sleep(30);     //使主线程睡眠
                thdUdp.Abort();       //中断子线程
            }
        }

        protected void Listener()   //监听
        {
            //将IP地址和端口号以网络端点存储
            ServerEndPoint = new IPEndPoint(IPAddress.Any, localPort);
            if (UDP_Server != null)
                UDP_Server.Close();                  //关闭初始化的Socket
            UDP_Server = new UdpClient(localPort);   //创建一个新的端口号监听
            UDP_Server.Client.ReceiveBufferSize = 1000000000;   //接收缓冲区大小
            UDP_Server.Client.SendBufferSize = 1000000000;    //发送缓冲区大小
            try
            {
                thdUdp = new Thread(new ThreadStart(GetUDPData)); //创建一个线程
                thdUdp.Start();                                   //执行当前线程
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());  //显示线程的错误信息
            }
        }

        private void GetUDPData() //获取当前接收的消息
        {
            while (active)  //当监听打开时
            {
                try
                {
                    //存储获取的远程消息
                    byte[] Data = UDP_Server.Receive(ref ServerEndPoint);
                    if (DataArrival != null)
                    {
                        //调用DataArrival事件
                        DataArrival(Data, ServerEndPoint.Address, ServerEndPoint.Port);
                    }
                    Thread.Sleep(0);
                }
                catch { }
            }
        }

        private void CallBackMethod(IAsyncResult ar)
        {
            //从异步状态ar.AsyncState中,获取委托对象
            DataArrivalEventHandler dn = (DataArrivalEventHandler)ar.AsyncState;
            //一定要EndInvoke,否则你的下场很惨
            dn.EndInvoke(ar);
        }

        public void Send(System.Net.IPAddress Host, int Port, byte[] Data)
        {
            try
            {
                //用指定的IP地址和端口号初始化Server
                IPEndPoint server = new IPEndPoint(Host, Port);
                UDP_Server.Send(Data, Data.Length, server);  //将消息发送给远程客户端
            }
            catch (Exception e)  //处理异常
            {
                MessageBox.Show(e.ToString());  //弹出异常信息提示框
            }
        }
    }
这是我用C#写局域网QQ时自定义的UDPSocket控件,客户端和服务器端都插入这个控件,但是客户端发送到服务器端的信息服务器接收不到,为什么?? --------------------编程问答-------------------- 加打印,设置断点锁定问题出自哪里,然后再解决 --------------------编程问答--------------------
你是在同一台机子测的吧,那两个软件的端口要设成不一样的 --------------------编程问答-------------------- 只能说你是没连上服务器! --------------------编程问答-------------------- 我是在一台机子上测的,但客户端和服务器端的端口号是不一样的!
--------------------编程问答--------------------
引用 2 楼 wyd1520 的回复:

你是在同一台机子测的吧,那两个软件的端口要设成不一样的

端口当然不一样!是服务器端没有收到数据报
--------------------编程问答-------------------- 我设置断点调试了,就是到服务器端的DataArrival执行不下去!

引用 1 楼 AAA123524457 的回复:
加打印,设置断点锁定问题出自哪里,然后再解决

我设置断点调试了,就是到服务器端的DataArrival执行不下去!
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,