第五章-UDP用戶數(shù)據(jù)報(bào)協(xié)議

服務(wù)器

namespace Udp服務(wù)器
{
    class Program
    {
        static void Main(string[] args)
        {
            開(kāi)始監(jiān)聽(tīng)();
            Console.ReadLine();
        }
        static void 開(kāi)始監(jiān)聽(tīng)()
        {
            UdpClient udpServer = new UdpClient(6666);
            IPEndPoint ip終端 = null;
            try
            {
                while(true)
                {
                    Console.WriteLine("等待接受...");
                    byte[] 獲取字節(jié)s = udpServer.Receive(ref ip終端);//接受數(shù)據(jù).ref接受的是發(fā)送端的ip以及端口
                    Console.WriteLine("ip終端:" + ip終端.ToString());//自身的
                    string 獲取str = Encoding.Unicode.GetString(獲取字節(jié)s, 0, 獲取字節(jié)s.Length);
                    Console.WriteLine("接受到信息:{0}", 獲取str);
                    //收到消息"quit"時(shí),跳出循環(huán)
                    if (獲取str == "quit") break;
                    //想客戶端會(huì)送消息
                    string sendString = "你好.  服務(wù)端";
                    Console.WriteLine("發(fā)送信息{0}" , sendString);
                    byte[] sendBytes = Encoding.Unicode.GetBytes(sendString);
                    udpServer.Send(sendBytes, sendBytes.Length, "127.0.0.1", 7777);//目標(biāo)ip和端口
                }
                udpServer.Close();
                Console.WriteLine("對(duì)方已經(jīng)退出,按回車(chē)結(jié)束");
            }
            catch(Exception a)
            {
                Console.WriteLine(a.ToString());
            }

        }
    }
}


客戶端

namespace Udp客戶端
{
    class Program
    {
        static void Main(string[] args)
        {
            string 發(fā)送str = "我是客戶端1";
            Send(發(fā)送str);
            Send("quit");
            Console.ReadLine();
        }
        static void Send(string 消息)
        {
            UdpClient udpClient = new UdpClient(7777);
            try
            {
                Console.WriteLine("想服務(wù)器發(fā)送數(shù)據(jù):{0}", 消息);
                byte[] 發(fā)送字節(jié)s = System.Text.Encoding.Unicode.GetBytes(消息);
                udpClient.Send(發(fā)送字節(jié)s, 發(fā)送字節(jié)s.Length, "127.0.0.1", 6666);
                if(消息=="quit")
                {
                    Console.WriteLine("已經(jīng)向?qū)Ψ桨l(fā)送quit信息, 請(qǐng)按回車(chē)鍵退出程序.");
                    return;
                }
                IPEndPoint 終端 = null;
                byte[] 接受bytes = udpClient.Receive(ref 終端);//接受任意來(lái)自u(píng)dpClient的艦艇的端口.就是創(chuàng)建的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());
            }
        }
    }
}





發(fā)送廣播信息和接受廣播信息

namespace 廣播程序設(shè)計(jì)實(shí)例
{
    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());
            //設(shè)置Broadcast值為表示允許套接字發(fā)送廣播信息,改值默認(rèn)為  不允許.
            socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);

            byte[] 發(fā)送bytes = System.Text.Encoding.Unicode.GetBytes(textBox1.Text);
            //向子網(wǎng)發(fā)送信息
            socket.SendTo(發(fā)送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發(fā)送的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希望繼續(xù)接受此類(lèi)消息嗎?\n";
                MessageBox.Show(getData);
                string message = "來(lái)自" + ep.ToString() + "的消息";//ep的端口是接受端口(隨機(jī)數(shù),不是8000)
                MessageBox.Show(message);
                break;
            }
        }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容