UDP SOCKET网络通信 C#

本文提供了UDP广播通信的实现示例,包括发送端和接收端的C#代码。通过使用Socket API,演示了如何创建一个简单的UDP广播客户端,能够发送和接收广播消息。

接收端

using System;

using System.Net;

using System.Net.Sockets;

using System.Text;

using System.Threading;

using System.Windows.Forms;

 

namespace UDPReceiveTest

{

    public partial class Form1 : Form

    {

        public Thread UdpThread;

 

        public Form1()

        {

            InitializeComponent();

        }

 

        private void Form1_Load(object sender, EventArgs e)

        {

            string strHostIP = "";

            IPHostEntry oIPHost = Dns.GetHostEntry(Environment.MachineName);

            if (oIPHost.AddressList.Length > 0)

                strHostIP = oIPHost.AddressList[0].ToString();

            this.txtIP.Text = strHostIP;

 

            if (UdpThread != null)

            {

                UdpThread.Abort();

                Thread.Sleep(TimeSpan.FromMilliseconds(500d));

            }

           

            try

            {

                UdpThread = new Thread(new ThreadStart(UdpReciveThread));

                UdpThread.Start();

            }

            catch (Exception y)

            {

                MessageBox.Show(this, y.Message, "Error", MessageBoxButtons.OK,MessageBoxIcon.Error);

                this.Dispose(true);

            }

        }

 

        private void button1_Click(object sender, EventArgs e)

        {

            txtMessage.Text = string.Empty;

        }

 

        delegate void SetTextCallback(IPEndPoint remoteHost, byte[] buf, string bufs);

        //接收数据线程

        void UdpReciveThread()

        {

            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,ProtocolType.Udp);

            IPEndPoint iep = new IPEndPoint(IPAddress.Any, int.Parse(txtPort.Text));//接收广播信息,端口是(因为是广播端口是)

            socket.Bind(iep);

            EndPoint ep = (EndPoint)iep;

            Byte[] bytes = new byte[1024];

            while (Thread.CurrentThread.ThreadState.Equals(ThreadState.Running))

            {

                int message = socket.ReceiveFrom(bytes, ref ep);//接收发送的信息

                string bufs = Encoding.UTF8.GetString(bytes);

 

                txtMessage.Text += (ep as IPEndPoint).Address.ToString() + "说:" +Environment.NewLine;

                txtMessage.Text += bufs + Environment.NewLine + Environment.NewLine;

            }

 

            txtMessage.Text += "结束..." + (char)13;

        }

 

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)

        {

            try

            {

                UdpThread.Abort();

            }

            catch

            {

 

            }

        }

    }

}

 

发送端

using System;

using System.Net;

using System.Net.Sockets;

using System.Text;

using System.Windows.Forms;

 

namespace UDPSendTest

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

 

        private void btnSend_Click(object sender, EventArgs e)

        {

            Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,ProtocolType.Udp);

            IPEndPoint iep1 = new IPEndPoint(IPAddress.Parse(txtIP.Text),int.Parse(txtPort.Text));//进行地址的广播,广播端口

            byte[] data = Encoding.ASCII.GetBytes(txtMessage.Text);

            sock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);

            sock.SendTo(data, iep1);//发送字符

            sock.Close();

        }

    }

}

 

转载于:https://www.cnblogs.com/jhlong/p/5445424.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值