第五章-UDP用户数据报协议

服务器

namespace Udp服务器
{
    class Program
    {
        static void Main(string[] args)
        {
            开始监听();
            Console.ReadLine();
        }
        static void 开始监听()
        {
            UdpClient udpServer = new UdpClient(6666);
            IPEndPoint ip终端 = null;
            try
            {
                while(true)
                {
                    Console.WriteLine("等待接受...");
                    byte[] 获取字节s = udpServer.Receive(ref ip终端);//接受数据.ref接受的是发送端的ip以及端口
                    Console.WriteLine("ip终端:" + ip终端.ToString());//自身的
                    string 获取str = Encoding.Unicode.GetString(获取字节s, 0, 获取字节s.Length);
                    Console.WriteLine("接受到信息:{0}", 获取str);
                    //收到消息"quit"时,跳出循环
                    if (获取str == "quit") break;
                    //想客户端会送消息
                    string sendString = "你好.  服务端";
                    Console.WriteLine("发送信息{0}" , sendString);
                    byte[] sendBytes = Encoding.Unicode.GetBytes(sendString);
                    udpServer.Send(sendBytes, sendBytes.Length, "127.0.0.1", 7777);//目标ip和端口
                }
                udpServer.Close();
                Console.WriteLine("对方已经退出,按回车结束");
            }
            catch(Exception a)
            {
                Console.WriteLine(a.ToString());
            }

        }
    }
}


客户端

namespace Udp客户端
{
    class Program
    {
        static void Main(string[] args)
        {
            string 发送str = "我是客户端1";
            Send(发送str);
            Send("quit");
            Console.ReadLine();
        }
        static void Send(string 消息)
        {
            UdpClient udpClient = new UdpClient(7777);
            try
            {
                Console.WriteLine("想服务器发送数据:{0}", 消息);
                byte[] 发送字节s = System.Text.Encoding.Unicode.GetBytes(消息);
                udpClient.Send(发送字节s, 发送字节s.Length, "127.0.0.1", 6666);
                if(消息=="quit")
                {
                    Console.WriteLine("已经向对方发送quit信息, 请按回车键退出程序.");
                    return;
                }
                IPEndPoint 终端 = null;
                byte[] 接受bytes = udpClient.Receive(ref 终端);//接受任意来自udpClient的舰艇的端口.就是创建的7777
                Console.WriteLine("终端:" + 终端.ToString());//终端是自身的
                string 获取str = System.Text.Encoding.Unicode.GetString(接受bytes);
                Console.WriteLine("接受信息:{0}", 获取str);
                udpClient.Close();
            }
            catch(Exception a)
            {
                Console.WriteLine(a.ToString());
            }
        }
    }
}





发送广播信息和接受广播信息

namespace 广播程序设计实例
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            //IPEndPoint ip终端 = new IPEndPoint(IPAddress.Broadcast, 8000);//广播.//255.255.255.255:8000
            IPEndPoint ip终端 = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8000);//广播
            MessageBox.Show(ip终端.ToString());
            //设置Broadcast值为表示允许套接字发送广播信息,改值默认为  不允许.
            socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);

            byte[] 发送bytes = System.Text.Encoding.Unicode.GetBytes(textBox1.Text);
            //向子网发送信息
            socket.SendTo(发送bytes, ip终端);
            socket.Close();

        }
    }
}
namespace 接受广播
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            IPEndPoint ip终端 = new IPEndPoint(IPAddress.Any, 8000);//any是0.0.0.0 接受任意ip发送的8000端口消息
            MessageBox.Show(ip终端.ToString());
            socket.Bind(ip终端);
            EndPoint ep = (EndPoint)ip终端;
            byte[] getBytes = new byte[1024];
            while(true)
            {
                socket.ReceiveFrom(getBytes, ref ep);//接受到信息.并保存
                string getData = System.Text.Encoding.Unicode.GetString(getBytes);
                //注意不能胜率getData.TrimEnd'\u0000' 否则看不到后面信息
                getData = getData.TrimEnd('\u0000') + "\n\n希望继续接受此类消息吗?\n";
                MessageBox.Show(getData);
                string message = "来自" + ep.ToString() + "的消息";//ep的端口是接受端口(随机数,不是8000)
                MessageBox.Show(message);
                break;
            }
        }
    }
}

你可能感兴趣的:(第五章-UDP用户数据报协议)