美文网首页
第五章-UDP用户数据报协议

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

作者: JJJJJJJJJJC | 来源:发表于2019-10-18 16:17 被阅读0次

    服务器

    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用户数据报协议

          本文链接:https://www.haomeiwen.com/subject/btgimctx.html