Java实现UDP通信

2021-07-01  本文已影响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.可靠性和有序性

  1. UDP具有较好的实时性,工作效率要比tcp略高。
  2. TCP对系统资源要求较多,TCP也被认为是重量级协议,UDP协议则是一个轻量级的协议。
上一篇下一篇

猜你喜欢

热点阅读