c# UDP广播

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Threading;

namespace UDP2
{
    public partial class Form1 : Form
    {
        private UdpClient sendUdpClient;
        private UdpClient receiveUpdCLient;

        public Form1()
        {
            InitializeComponent();

            IPAddress[] ips = Dns.GetHostAddresses("");
            textBox1.Text = ips[0].ToString();
            int port = 5000;
            textBox2.Text = port.ToString();
            textBox4.Text = ips[0].ToString();
            textBox3.Text = port.ToString();

        }

        private void textBox4_TextChanged(object sender, EventArgs e)
        {

        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button4_Click(object sender, EventArgs e)
        {
            IPAddress localIp = IPAddress.Parse(textBox1.Text);
            IPEndPoint localIpEndPoint = new IPEndPoint(localIp, int.Parse(textBox2.Text));

            receiveUpdCLient = new UdpClient(localIpEndPoint);
            Thread receiceThread = new Thread(ReceiveMessage);
            receiceThread.Start();
        }
        //接受消息方法
        private void ReceiveMessage()
        {
            IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);//获得连接到本机的远程机器的IPENDPOINT
            while (true)
            {
                try
                {
                    //关闭receiveUdpClient时此时会产生异常
                    byte[] receiceBytes = receiveUpdCLient.Receive(ref remoteIpEndPoint);
                    string message = Encoding.Unicode.GetString(receiceBytes);

                    //显示消息内容
                    ShowMessageforView(listBox1, string.Format("{0}[{1}])", remoteIpEndPoint, message));




                }
                catch
                {
                    break;
                }
            }
        }
        //利用委托回调机制实现界面上消息内容显示
        delegate void ShowMessageforViewCallBack(ListBox listbox, string text);
        private void ShowMessageforView(ListBox listbox, string text)
        {
            if (listbox.InvokeRequired)
            {
                ShowMessageforViewCallBack showMessageforViewCallback = ShowMessageforView;
                listbox.Invoke(showMessageforViewCallback, new object[] { listbox, text });

            }
            else
            {
                listBox1.Items.Add(text);
                listBox1.SelectedIndex = listBox1.Items.Count - 1;
                listBox1.ClearSelected();
            
            }
        
        
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox5.Text == string.Empty)
            {
                MessageBox.Show("发送内容不能为空", "提示");
                return;
            }

            //选择发送模式
            if (checkBox1.Checked == true)
            { //匿名模式(套接字绑定的端口由系统随机分配)
                sendUdpClient = new UdpClient(0);

            }
            else
            {
               //实名模式(套接字绑定到本地指定的端口)
                IPAddress localIP = IPAddress.Parse(textBox1.Text);
                IPEndPoint localIpEndPoint = new IPEndPoint(localIP, int.Parse(textBox2.Text));
                sendUdpClient = new UdpClient(localIpEndPoint);
                
            }
            Thread sendThread = new Thread(SendMessage);
            sendThread.Start(textBox5.Text);

        }
        //发送消息方法
        public void SendMessage(object obj)
        {
            string message = (string)obj;
            byte[] sendbytes = Encoding.Unicode.GetBytes(message);
            IPAddress remoteIp = IPAddress.Parse(textBox4.Text);
            IPEndPoint remoteIpEndPoint = new IPEndPoint(remoteIp, int.Parse(textBox3.Text));
          
            //显示消息内容
            sendUdpClient.Send(sendbytes, sendbytes.Length, remoteIpEndPoint);
            sendUdpClient.Close();
            ResetMessageText(textBox5);
           
        }
        delegate void ResetMessageCallback(TextBox textbox);
        private void ResetMessageText(TextBox textbox)
        {
            // Control.InvokeRequired属性代表
            // 如果控件的处理与调用线程在不同线程上创建的,则为true,否则为false
            if (textbox.InvokeRequired)
            {
                ResetMessageCallback resetMessagecallback = ResetMessageText;
                textbox.Invoke(resetMessagecallback, new object[] { textbox });
            }
            else
            {
                textbox.Clear();
                textbox.Focus();
            }
        }
        private void button3_Click(object sender, EventArgs e)
        {
            receiveUpdCLient.Close();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.listBox1.Items.Clear();
        }



    }
}

  

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Threading;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        
        EndPoint ep;
        Socket socke;
        private void button1_Click(object sender, EventArgs e)
        {
             socke = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
             IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9095);  //初始化
            ep = (EndPoint)iep;
            socke.Bind(iep);

            Thread re = new Thread(ReceiveMessage);
            re.Start(socke);
        }
        private void ReceiveMessage(object o)
        {
            Socket socke = o as Socket;
            string msg;
            byte[] data = new byte[1024];
            while (true)
            {
                try
                {
                    // 关闭receiveUdpClient时此时会产生异常
                    int receiveBytes = socke.ReceiveFrom(data, ref ep);

                    string message = Encoding.Unicode.GetString(data,0,receiveBytes);

                    // 显示消息内容
                    ShowMessageforView(lstbxMessageView, string.Format("{0}[{1}]", ep, message));

                }
                catch
                {
                    break;
                }
            }
        }
        //接受消息
        delegate void ShowMessageforViewCallBack(ListBox listbox, string text);
        private void ShowMessageforView(ListBox listbox, string text)
        {
            if (listbox.InvokeRequired)
            {
                ShowMessageforViewCallBack showMessageforViewCallback = ShowMessageforView;
                listbox.Invoke(showMessageforViewCallback, new object[] { listbox, text });
            }
            else
            {
                lstbxMessageView.Items.Add(text);
                for (int i = 0; i < lstbxMessageView.Items.Count; i++)
                {
                    if (lstbxMessageView.Items[i].ToString().Contains("172.16.5.58")) 
                    {
                        lstbxMessageView.Items.Clear();
                    }
                }
                    lstbxMessageView.SelectedIndex = lstbxMessageView.Items.Count - 1;
                lstbxMessageView.ClearSelected();
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Thread sendThread = new Thread(SendMessage);
            sendThread.Start(textBox1.Text);
        }
        public void SendMessage(object obj)
        {
            string message = (string)obj;
           Socket sockes = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            IPEndPoint iep=new IPEndPoint(IPAddress.Parse("172.16.255.255"),9095);
            sockes.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);

            //显示消息内容
            byte[] sendbytes = Encoding.Unicode.GetBytes(message);
            sockes.SendTo(sendbytes, iep);
            sockes.Close();
           

        }
    }
}

  

 

posted @ 2016-07-12 11:04  尘梦  阅读(1066)  评论(0编辑  收藏  举报