zoukankan      html  css  js  c++  java
  • 网络编程:TCP与UDP的区别

    TCP/IP编程

    使用TCP/IP的套接字(Socket)进行通信

    服务器程序将一个套接字绑定到一个特定的端口,并通过此套接字等待和监听客户端到端口的连接请求

    客户端程序根据服务器程序所在的主机名和端口发出连接请求

    视同ServerSocket和Socket实现服务器端和客户端的Socket通信

    我们以客户端发送数据服务器端接收数据为例看看整个操作流程

    服务端

    //服务器端接收数据
    public class Server {
    
        public static void main(String[] args) {
            try {
                //创建服务端套接字
                ServerSocket serverSocket    = new ServerSocket(9999);
                //监听客户端请求
                Socket socket = serverSocket.accept();
                //获取Socket的输入对象
                InputStream inputStream = socket.getInputStream();
                byte[] car = new byte[1024];
                int length = 0;
                
                //输出对象
                OutputStream outputStream = new FileOutputStream("C:/Java_Tools/temp");
                while((length=inputStream.read(car))!=-1){
                    outputStream.write(car,0,length);
                }
                outputStream.flush();
                outputStream.close();
                inputStream.close();
                socket.close();
                serverSocket.close();
                
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        }
        
    }

    客户端

    //客户端发送数据
    public class Client {
    
        public static void main(String[] args) {
            try {
                Socket socket = new Socket("127.0.0.1",9999);
                
                //向服务器端发送数据
                OutputStream outputStream = socket.getOutputStream();
                
                InputStream inputStream = new FileInputStream("C:/Java_Tools/log.log");
                
                byte[] car = new byte[1024];
                int length = 0;
                while((length=inputStream.read(car))!=-1){
                    outputStream.write(car,0,length);
                }
                outputStream.flush();
                outputStream.close();
                inputStream.close();
                socket.close();
                
            } catch (Exception e) {
                e.printStackTrace();
            }
            
            
        }
        
    }

    结论:由上过程可知,TCP/IP编程在创建socket时就已经建立了连接,固定了不可更改,只能是点到点的传输

    UDP编程

    UDP是用户数据报协议,基于UDP的Socket编程时一种非连接的Socket通信,它提供的是无连接、不可靠信息传送服务

    DatagramSocket:用来发送和接受数据包的套接字

    DatagramPacket:表示数据包

    客户端:

    public class Client {
    
        public static void main(String[] args) {
            try {
                DatagramSocket socket  = new DatagramSocket(9999);
                
                byte[] data = "来自客户端的问候".getBytes();
                SocketAddress address = new InetSocketAddress("127.0.0.1",8888);
                DatagramPacket packet = new DatagramPacket(data, data.length, address);
                
                socket.send(packet);
                socket.close();
            } catch (Exception e) {
                e.printStackTrace();
            }    
        
        }
        
    }

    服务端:

    public class Server {
    
        public static void main(String[] args) {
            try {
                DatagramSocket socket = new DatagramSocket(8888);
                
                byte[] car = new byte[1024];
                DatagramPacket packet = new DatagramPacket(car,car.length);
                socket.receive(packet);
                int length = packet.getLength();
                System.out.println(new String(car,0,length));
                socket.close();
            } catch (Exception e) {
                e.printStackTrace();
            }    
        }
        
    }

    结论:UDP是先指定一个服务端端口号,然后通过数据包来确定连接,从而可以实现一对一、一对多、多对一、多对多的交互通信

    两者比较:

    1、TCP面向连接,发送数据前要先建立连接;UDP是无连接的,发送数据前不需要建立连接

    2、TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,不保证可靠交付;

    3、UDP有较好的实时性,效率比TCP高,适用于对高速传输和实时性较高的通信或广播通信

    4、每一条TCP连接只能是点到点;UDP支持一对一、一对多、多对一、多对多的交互通信

  • 相关阅读:
    十进制数转换
    桶排序
    快速排序
    单词倒排
    (c++) string b; cin>>b; int i=strlen(b); 报错的原因。
    n的阶乘(1<n<10000)(结果超大……)
    2020软件工程最后一次作业
    2020软件工程第四次作业
    2020软件工程第三次作业
    2020软件工程第二次作业
  • 原文地址:https://www.cnblogs.com/yimengxianzhi/p/12426704.html
Copyright © 2011-2022 走看看