zoukankan      html  css  js  c++  java
  • TCP与UDP的区别

    TCP编程

    为了方便开发网络应用程序,美国伯克利大学在Unix上实现的一种应用程序访问网络的通信协议Socket,Socket的出现使程序员可以很方便的访问TCP/IP。
    使用TCP/IP的套接字(Socket)进行通信。
    服务器程序将一个套接字绑定到一个特定的端口,并通过此套接字等待和监听客户端到端口的连接请求。
    客户端程序根据服务器程序所在的主机名和端口发出连接请求。

    使用ServerSocket和Socket实现服务器端和客户端的Socket通信

    public class Server {

    public static void main(String[] args) throws Exception {
    ServerSocket serverSocket = new ServerSocket(9999);
    Socket socket = serverSocket.accept();
    InputStream inputStream = socket.getInputStream();
    byte [] car = new byte[1024];
    int length = inputStream.read(car);
    System.out.println(new String(car,0,length));
    serverSocket.close();
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class Client {

    public static void main(String[] args) throws Exception {
    Socket socket = new Socket("127.0.0.1", 9999);
    OutputStream outputStream = socket.getOutputStream();
    byte [] car = "Hello Server".getBytes();
    outputStream.write(car, 0, car.length);
    outputStream.flush();
    outputStream.close();
    socket.close();
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    结果


    UDP编程

    UDP是用户数据报协议,基于UDP的Socket编程是一种非连接的Socket通信,它提供的是无连接、不可靠信息传送服务。
    DatagramSocket:用来发送和接收数据包的套接字
    DatagramPacket :表示数据包

    服务端步骤:

    创建数据Socket,指定一个服务端端口号。
    提供一个byte数组用于数据存储。
    调用DatagramPacket的receive() 方法进行数据的接收;
    调用DatagramPacket的getData()方法得到byte数组的数据;
    释放资源。
    public class Server {

    public static void main(String args[]) throws Exception{
    DatagramSocket datagramSocket = new DatagramSocket(8888);
    // 创建数据报包的套接字,端口号8888
    byte[] bufferArray = new byte[1024];
    // 创建接收的数据报包
    DatagramPacket datagramPacket = new DatagramPacket(bufferArray, bufferArray.length);
    datagramSocket.receive(datagramPacket);// 接受数据
    byte [] car = datagramPacket.getData();
    int length = datagramPacket.getLength();
    String result = new String(car, 0, length);// 得到数据
    System.out.println("服务端:"+result);
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    客户端步骤:
    创建数据Socket,指定一个客户端端口号。
    提供一个存储了所发送数据的byte数组,提供服务端的IP地址和端口号。
    调用DatagramPacket的send()方法进行数据的发送;
    释放资源。

    public class Client {

    public static void main(String args[]) throws Exception{
    DatagramSocket datagramSocket = new DatagramSocket(9999);
    // 创建数据包套接字,端口号9999
    byte [] car = "你好服务器端".getBytes();
    // 根据主机名和端口号创建套接字地址
    InetSocketAddress Address = new InetSocketAddress("127.0.0.1", 8888);
    // 创建发送的数据包
    DatagramPacket datagramPacket = new DatagramPacket(car, car.length, Address);
    datagramSocket.send(datagramPacket);// 发送数据
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    结果

    TCP与UDP的区别

    TCP面向连接,发送数据前要先建立连接;UDP是无连接的,发送数据前不需要建立连接;
    TCP连接传送的数据,安全性好,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,不保证可靠交付;
    UDP有较好的实时性,性能高,效率比TCP高,适用于对高速传输和实时性较高的通信或广播通信;
    每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信。
    ---------------------

  • 相关阅读:
    新手第一次联系oracle的碰到的触发器不能创建的问题
    dubbo注册中心占位符无法解析问题(二)
    dubbo注册中心占位符无法解析问题(一)
    .
    Ubuntu16 安装后配置
    TiDB-----使用 TiUP cluster 在单机上模拟生产环境部署步骤
    TiDB 单机安装(在 Linux OS 上部署本地测试环境)
    WPF查找子控件和父控件方法
    Java基础相关
    C++ namespace浅析
  • 原文地址:https://www.cnblogs.com/hyhy904/p/11192623.html
Copyright © 2011-2022 走看看