首页 > 其他分享 >TCP/UDP

TCP/UDP

时间:2023-02-24 15:01:30浏览次数:41  
标签:UDP Console string TCP WriteLine new

TCP与UDP

在后台都用到套接字Socket,当准确度要求高的时候,用TCP。若追求性能和速度,而且对准确度要求不高时,用UDP。

TCP协议和UDP协议连接过程的区别如下:

  • 基于连接与无连接;
  • 对系统资源的要求(TCP较多,UDP少);
  • UDP程序结构较简单;
  • TCP数据传输采用流模式与UDP则采用数据报模式;
  • TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。

TCP

TCP是首选协议,它提供有保证的传输、错误校正和缓冲。
System.Net.Sockets. TcpClient类封装了TCP链接,提供属性字段来控制链接,包括缓冲、缓冲区的大小和超时。
TCP提供很多功能来确保数据的传输,它还提供了错误校正以及当数据丢失或数据包损坏时重新传输的功能。TCP可缓冲传入和传出的数据,还保证在传输过程中,在把数据包传输给应用程序之前重组杂乱的一系列数据包。

Client 发送端

 Console.WriteLine("按任意键开始连接服务器...");
            Console.ReadKey();
            //创建一个客户端Socket
            Socket clientSocket = new(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //连接服务器
            clientSocket.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888));
            Console.WriteLine("连接服务器成功");
            while (true)
            {
                Console.WriteLine("请输入要发送的消息:");
                string sendMsg = Console.ReadLine();
                if (!string.IsNullOrEmpty(sendMsg))
                {
                    //发送消息
                    clientSocket.Send(System.Text.Encoding.UTF8.GetBytes(sendMsg));
                    if (sendMsg == "quit")
                    {
                        //关闭连接
                        clientSocket.Close();
                        break;
                    }
                }
            }

Server 接收端

//创建一个服务器Socket
            Socket serverSocket = new (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //绑定IP地址和端口号
            serverSocket.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888));
            //开始监听
            serverSocket.Listen(10);
            Console.WriteLine("开始监听");
            //接收客户端连接
            Socket clientSocket = serverSocket.Accept();
            Console.WriteLine("客户端连接成功");
            while (true)
            {
                //接收消息
                byte[] data = new byte[1024];
                int length = clientSocket.Receive(data);
                string receiveMsg = Encoding.UTF8.GetString(data, 0, length);
                if (receiveMsg == "quit")
                {
                    Console.WriteLine($"客户端输入命令:{receiveMsg},表示客户端断开了连接!");
                    break;
                }
                Console.WriteLine("接收到消息:" + receiveMsg);
            }

UDP

通常在速度和性能要求比可靠性更高的应用程序中使用UDP,如视频流。
UDP是一个无连接的协议。

Client 发送端

static void Main(string[] args)
        {
            //做好链接准备
            UdpClient client = new();  //实例一个端口
            IPAddress remoteIP = IPAddress.Parse("10.254.244.82");  //假设发送给这个IP
            int remotePort = 11000;  //设置端口号
            IPEndPoint remotePoint = new(remoteIP, remotePort);  //实例化一个远程端点 
            Console.WriteLine("请输入发送内容...");
            while (true)
            {
                var sendString = Console.ReadLine();//要发送的数据
                if (!string.IsNullOrEmpty(sendString))
                {
                    byte[] sendData = Encoding.Default.GetBytes(sendString);
                    client.Send(sendData, sendData.Length, remotePoint);//将数据发送到远程端点
                    Console.WriteLine("数据发送成功!");
                    if (sendString == "quit")
                    {
                        client.Close();//关闭连接
                        break;
                    }
                }
            }
        }

Server 接收端

 static void Main(string[] args)
        {
            //实例化一个远程端点,IP和端口可以随意指定,等调用Client.Receive(ref remotePoint)时会将该端点改成真正发送端端点 
            UdpClient Client = new(11000);
            IPEndPoint RemotePoint = new(IPAddress.Any, 0);
            Console.WriteLine("正在准备接收数据...");
            while (true)
            {
                byte[] ReceiveData = Client.Receive(ref RemotePoint);
                string ReceiveString = Encoding.Default.GetString(ReceiveData);
                if (!string.IsNullOrEmpty(ReceiveString) && ReceiveString != "quit")
                {
                    Console.WriteLine(ReceiveString);
                }
                else
                {
                    Client.Close();//关闭连接
                    Console.WriteLine("数据接收完毕");
                    break;
                }
            }
        }

标签:UDP,Console,string,TCP,WriteLine,new
From: https://www.cnblogs.com/smileher/p/17151474.html

相关文章

  • 深度好文:TCP三次握手和四次挥手深入实践
     TCP连接状态 图1是TCP三次握手、数据传输、四次挥手三个阶段的状态转移图,状态说明如下: LISTEN:侦听来自客户端的TCP端口的连接请求SYN-SENT:再发送连接请求后等......
  • 换个角度理解TCP建立连接为什么需要三次握手
    1、第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。2、换个易于理解的视角来看为什么要3次握手。客户端和服务端通信前要进行连接,“3次握手”的......
  • TCP和UDP的区别及使用场景
    一、TCP和UDP是什么?   TCP:   传输控制协议(TCP,TransmissionControlProtocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC793定义。   ......
  • nginx TCP代理增加日志配置
    在straem增加一下配置stream{log_formatTCP_proxy'$remote_addr-[$time_local]''$protocol$status$bytes_sent$bytes_received''......
  • TCP 三次握手四次挥手具体原理——转载
    【TCP/IP】TCP协议的流程图解  一、TCP协议起步#1.什么是TCP协议#TCP是面向连接的协议,这是因为在一个应用进程可以开始向另一个应用进程发送数据之前,这两个进程必......
  • UDP协议
    UDP协议概述UDP(UserDatagramProtocol)协议和TCP协议都是传输层协议,UDP仅在IP数据报的基础上增加了两个基本的服务:复用和分用以及差错检测。UDP的优点如下:UDP无需建......
  • ESP8266配置UDP数据传输
    1.ESP8266简介   ESP8266是一款高性能的WIFI串口模块,内部集成MCU能实现单片机之间串口通信,是目前使用最广泛的一种WIFI模块之一。可以简单理解为一个WIFI转串口的设备......
  • IDEA - MySql / Spring mvc : Exception in thread "RMI TCP Connection(idle)" java.
    运行Intellijidea时output窗口出现该问题:Exceptioninthread“RMITCPConnection(idle)”java.lang.OutOfMemoryError:PermGenspace导致有些功能不能继续执行。运行......
  • 套接字连接以及TCP三次握手详解
    在套接字和地址文章中,我们画出基于套接字接口网络应用的一张图,本文章就是详细解释这些函数具体怎么实现的。socket创建套接字客户端和服务器使用socket函数来创建一个套......
  • udp通信
    服务端:importsocketsk=socket.socket(type=socket.SOCK_DGRAM)sk.bind(("127.0.0.1",8080))whileTrue:msg,addr=sk.recvfrom(1024)print(msg.dec......