美文网首页
Java实现UDP通信

Java实现UDP通信

作者: 史啸天 | 来源:发表于2021-07-01 15:38 被阅读0次

    概述

    UDP协议与TCP协议不同,UDP属于不可靠协议,UDP在使用Socket之前不需要进行连接(三次握手)。Java中通过DatagramPacket和DatagramSocket类来使用UDP Socket。

    代码示例

    客户端
    import java.io.IOException;
    import java.net.*;
    import java.util.Scanner;
    
    /**
     * @author sxt
     * @date 2021-07-01
     * @describe 模拟客户端
     */
    public class UDPClient {
        public static void main(String[] args) throws IOException {
            InetAddress address = InetAddress.getByName("localhost"); // 服务器地址
            int port = 8800; // 端口
            while (true){
                // 1、向服务器发送数据
                Scanner scanner = new Scanner(System.in); // 等待键盘输入,回车结束
                String send = scanner.nextLine();
                byte[] data = send.getBytes(); // 字符串转byte数组
                DatagramPacket packet = new DatagramPacket(data, data.length, address, port); // 创建数据包
                DatagramSocket socket = new DatagramSocket(); // 创建DatagramSocket对象
                socket.send(packet); // 发送数据报文
    
                // 2、接收服务器端响应
                byte[] data2 = new byte[1024];
                DatagramPacket packet2 = new DatagramPacket(data2, data2.length); // 创建接收数据包
                socket.receive(packet2); // 等待接收服务器响应数据,阻塞
                String reply = new String(data2, 0, packet2.getLength()); // 解析数据
                System.out.println("我是客户端,服务器说:" + reply); // 打印
                socket.close(); // 关闭资源
            }
        }
    }
    
    服务端
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    
    /**
     * @author sxt
     * @date 2021-07-01
     * @describe
     */
    public class UDPServer {
        public static void main(String[] args) throws IOException {
            // 1、启动服务器,等待响应
            DatagramSocket socket = new DatagramSocket(8800);
            byte[] data = new byte[1024];
            DatagramPacket packet = new DatagramPacket(data, data.length); // 创建接收数据包
            System.out.println("****服务器端已经启动,等待客户端发送数据");
            while (true){
                socket.receive(packet); // 等待接收消息,接收到消息前会一直阻塞
                String info = new String(data, 0, packet.getLength()); // 读取数据
                System.out.println("我是服务器,客户端说:" + info);
                // 2、向客户端响应数据
                InetAddress address = packet.getAddress(); // 接收方的地址
                int port = packet.getPort(); // 接收方的端口
                String send = "ok"; // ack响应
                byte[] data2 = send.getBytes();
                DatagramPacket packet2 = new DatagramPacket(data2, data2.length,address,port); // 创建数据包
                socket.send(packet2); // 发送响应消息
            }
        }
    }
    

    UDP和TCP区别

    1.TCP是面向连接的协议,而UDP是无连接协议,即UDP在发送数据之前不需要建立连接。
    2.可靠性和有序性

    • TCP提供了交付保证(校验、重传控制、序号标识、滑动窗口协议和确认应答)。
    • UDP不提供任何序列性保证和交付保证。
    • TCP是全双工的可靠通信,UDP则是不可靠信道。
    1. UDP具有较好的实时性,工作效率要比tcp略高。
    2. TCP对系统资源要求较多,TCP也被认为是重量级协议,UDP协议则是一个轻量级的协议。

    相关文章

      网友评论

          本文标题:Java实现UDP通信

          本文链接:https://www.haomeiwen.com/subject/pwijultx.html