UDP不属于面向连接的通信

描述

UDP不属于面向连接的通信,在选择协议时,选择UDP必须要谨慎。在网络质量较差情况下,UDP协议数据包丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,具有资源消耗小,处理速度快等优点,所以通常音视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。

通过UDP进行信息收发,并没有严格的客户端和服务端之分,它不同于TCP,TCP必须建立可靠连接之后才可以通信,而UDP随时都可以给指定的ip和端口所对应进程发送消息。

UDP发送消息时需要绑定自己IP 和 端口号,接收消息的时候没有特殊限制,只要有人给自己发送,自己在线,就可以接收。

总之,使用UDP协议进行信息的传输之前不需要建立连接。换句话说就是客户端向服务器发送信息,客户端只需要给出服务器的ip地址和端口号,然后将信息封装到一个待发送的报文中并且发送出去。至于服务器端是否存在,或者能否收到该报文,客户端根本不用管。  

Server服务端实现代码

using System;

using System.Net;

using System.Net.Sockets;

using System.Text;

using System.Threading;

namespace UdpServer

{

    class Program

    {

        static Socket server;

        static void Main(string[] args)

        {

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

            server.Bind(new IPEndPoint(IPAddress.Parse("192.168.1.101"), 8001));                //绑定端口号和IP

            Thread threadReciveMsg = new Thread(ReciveMsg);                                     //开启接收消息线程

            threadReciveMsg.Start();

            Thread threadSendMsg = new Thread(sendMsg);                                         //开启发送消息线程

            threadSendMsg.Start();

            Console.WriteLine("服务端已开启");

        }

        ///

        /// 向指定IP的主机端口发送数据报

        ///

        static void sendMsg()

        {

            EndPoint point = new IPEndPoint(IPAddress.Parse("192.168.1.101"), 8000);

            while (true)

            {

                string msg = Console.ReadLine();

                server.SendTo(Encoding.UTF8.GetBytes(msg), point);

            }

        }

        ///

        /// 接收发送给本机ip对应端口号的数据报

        ///

        static void ReciveMsg()

        {

            while (true)

            {

                EndPoint point = new IPEndPoint(IPAddress.Any, 0);//用来保存发送方的ip和端口号

                byte[] buffer = new byte[1024];

                int length = server.ReceiveFrom(buffer, ref point);//接收数据报

                string message = Encoding.UTF8.GetString(buffer, 0, length);

                Console.WriteLine(DateTime.Now.ToString() + " Msg From: " + point.ToString() + ":" + message);

            }

        }

    }

}

审核编辑 :李倩
 

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分