Unity网络通信之Tcp与UDP协议概述以及两者的区别

一、什么是TCP

二、 Tcp的连接和断开 

三、TCP通过什么方式提供可靠性 

四、TCP编码部分 

      4.1   TcpListener (服务端) 

using System.Net.Sockets;
using System.Net;
using System.Reflection;

namespace ConsoleApplication1
{
     class Program
    {
        //创建服务器端,监听客户端
        public static void Main(string[] args)

        {
            IPAddress ip = IPAddress.Parse("127.0.0.1");
            int port = 5566;
            TcpListener   sever=new TcpListener(ip,port);
            sever.Start();//开启之后才能执行下面的监听
            sever.AcceptTcpClient();//监听客户端的连接

        }
    }
}

    4.2    TCPClient(客户端)

using System.Net.Sockets;
using System.Net;
using System.Reflection;

namespace ConsoleApplication1
{
     class Program
    {
        //创建客户端,连接服务器,读取写入数据
        public static void Main(string[] args)

        {
            IPAddress ip = IPAddress.Parse("127.0.0.1");
            int port = 5566;
            TcpClient client=new TcpClient();
            client.Connect(ip,port);//客户端连接服务器端
       //当服务器端与客户端连接上之后,就该获取两个计算机之间传递的数据,
           // NetworkStream stream = client.GetStream();
            //发送和接收都会用到数据流
          //  stream.Read();
           // stream.Write();
            // client.GetStream();// 可以从数据流中获取.获取数据流的方法,
        }
    }
}

五、 UDP协议

UDP协议不分服务器与客户端的区别,它并不是由一台机器向一台主机器传,UDP先是以数据报的模式扔到网上,自己去下载就可以了,所以UDP协议接收与发送都是Client。如下所示:
using System;
using System.Net.Sockets;
using System.Net;
using System.Reflection;
using System.Text;
using System.Threading;

namespace ConsoleApplication1
{
     class Program
    {
        public static void Main(string[] args)

        {
            UDPtest.Start();
        }
    }

     class UDPtest
     {
         //一个类中既要收又要发数据的话需要线程来辅助,不然会堵塞
         public static void Start()
         {
             
             UdpClient client=new UdpClient(new IPEndPoint(IPAddress.Any,0));
         
             IPEndPoint endpoint=new IPEndPoint(IPAddress.Parse("255.255.255.255"),7788);
             //服务端把一句话发送给客户端
            byte[] buf= Encoding.Default.GetBytes("Hello world"); //字符串进行转化成想要的字节流
           
            Thread tr=new Thread( new ThreadStart(Receive));//开启线程调用另一个协程

            tr.IsBackground = true;//确保开启的线程是主线程
            tr.Start();

            while (true)//循环,连着发送数据
            {
                
                client.Send(buf, buf.Length, endpoint);//向谁发送多长的字节
                Thread.Sleep(1000);//每隔一秒休眠一下
                
            }
            
         
         }
      //接收数据
         static void Receive()
         {
             UdpClient client=new UdpClient(new IPEndPoint(IPAddress.Any,7788));
         
             IPEndPoint endpoint=new IPEndPoint(IPAddress.Parse("255.255.255.255"),0);
             while (true)//因为是循环发送,我们就循环接收
             {
                
                byte[] buf= client.Receive(ref endpoint);//接收数据,把终结点传进来

                string mess = Encoding.Default.GetString(buf);
                Console.WriteLine(mess);
             }
         }

        

     }


}

运行打印结果:

六、Tcp与Udp的区别

 TCP是传输控制协议,UDP是用户数据报协议,两者是相对应的协议。

      解释: Tcp是基于连接,Udp是基于非连接。

      使用TCP时在正式收发数据前,必须与对方进行可靠的连接。一个TCP连接必须经过三次对话才能够建立起来,过程比较复杂。

UDP不与对方进行连接而是直接把数据包发送过去。基于这种情况UDP发送数据可能会丢包不安全。

扫描二维码关注公众号,回复: 10898844 查看本文章

 

发布了152 篇原创文章 · 获赞 24 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_40229737/article/details/105161752