zoukankan      html  css  js  c++  java
  • C# UDPCLIENT多线程实例

     //创建一个Thread实例  
            private Thread thread1;
            //创建一个UdpClient实例
            private UdpClient udpReceive;
            private UdpClient udpSend;
            private byte[] bytes;
            //private DialogResult result;
                   
            public myUdpClient()
            {
                InitializeComponent();
            }
            private void myUdpClient_Load(object sender, EventArgs e)
            {
                thread1 = new Thread(new ThreadStart(ReceiveMessage));
                thread1.Start();
            }
            private void ReceiveMessage()
            {
                //在本机指定的端口接收
                udpReceive = new UdpClient(8001);
                //将套接字加入组播组
                udpReceive.JoinMulticastGroup(IPAddress.Parse("127.0.0.1"), 50);
                //接收从远程主机发送过来的信息
                IPEndPoint iep= new IPEndPoint(IPAddress.Any, 0);
               while (true)
                {
                    //ref表示引用类型的 IPPoint实例接收消息
              try
              {
                      bytes = udpReceive.Receive(ref iep);
              }
              catch(SocketException e)
              {
               DialogResult result = MessageBox.Show("发送失败!");
              }
                    string str = Encoding.UTF8.GetString(bytes, 0, bytes.Length);
                    string message = "来自" + iep.ToString() + "的消息";
                    //显示消息 并以message为消息的标题
                    DialogResult res = MessageBox.Show(str, message);
                }
            }
            private void BtnSend_Click(object sender, EventArgs e)
            {
                //初始化UdpClient
                udpSend = new UdpClient();
                //实际使用时应将127.0.0.1改为服务器的远程IP
                IPAddress remoteIPAddress = IPAddress.Parse("127.0.0.1");
                IPEndPoint remoteIPEndPoint = new IPEndPoint(remoteIPAddress, 8002);
                //将发送内容转换为字节数组
                byte[] bytes = System.Text.Encoding.UTF8.GetBytes(TbxMessage.Text);
                //设置重传次数
                int retry = 0;
                while (true)
                {
                    try
                    {
                        udpSend.Send(bytes, bytes.Length, remoteIPEndPoint);
                        break;
                    }
                    catch(SocketException se)
                    {
                        if (retry < 3)
                        {
                            retry++; continue;
                        }
                        else
                        {
                            DialogResult result = MessageBox.Show("发送失败!");
                            break;
                        }
                    }
                }
                //清空TbxMesage中的内容
                TbxMessage.Clear();
                //光标还原
                TbxMessage.Focus();
                //关闭UdpClient
            }

            private void myUdpClient_FormClosing(object sender, FormClosingEventArgs e)
            {
                //关闭连接
                udpReceive.Close();
                udpSend.Close();
                //终止线程
                thread1.Abort();
            }
        }
    }

  • 相关阅读:
    java_hibernate 框架4
    java_hibernate 框架3
    java 基础 动态代理
    java_hibernate 框架2
    nginx配置反向代理实现负载均衡 小记
    mysql报错2059
    docker安装php容器小记
    docker安装nginx容器小记
    linux php添加pdo_mysql扩展
    linux php添加openssl扩展
  • 原文地址:https://www.cnblogs.com/vic_lu/p/1951310.html
Copyright © 2011-2022 走看看