java网络编程之UDP协议

文章目录

UDP简介

UDP(User Datagram Protocol)

java 复制代码
DatagramSocket 用于创建客户端、服务端

DatagramSocket() :创建客户端的Socket对象,系统随机分配一个端口
DatagramSocket(int port) : 创建服务端的Socket对象,指定端口号

DatagramPacket(byte buf[], int length,InetAddress address, int port) 
创建发出去的数据包

参数解释:
byte buf[]:字节数组,用于接收数据
int length :数据的长度
InetAddress address 网址对象
int port 端口号

DatagramPacket(byte buf[], int length)
创建用来接收的数据包

方法:

java 复制代码
send(DatagramPacket p) //发数据
receive(DatagramPacket p) //接收数据

一发一收

要先启动服务端再启动客户端。

客户端:
java 复制代码
public class Client {
    public static void main(String[] args) throws Exception {

        //创建客户端对象
        DatagramSocket socket = new DatagramSocket();

       /*  public DatagramPacket(byte buf[], int length,
        InetAddress address, int port) */
        byte[] bytes = "客户端发送给了一个数据包".getBytes();
        DatagramPacket packet = new DatagramPacket(bytes,bytes.length, InetAddress.getLocalHost(),6666);

        socket.send(packet);
        System.out.println("客户端数据发送完毕");
        socket.close();
        //记得关闭,不然占用资源。
    }
}
服务端:
java 复制代码
public class Server {
    public static void main(String[] args) throws Exception {
        DatagramSocket socket = new DatagramSocket(6666);
        System.out.println("服务端启动");
        //创建一个数据包对象,用于接受数据
        byte[] buffer = new byte[1024 * 64];//数据包最大为64k
        DatagramPacket packet = new DatagramPacket(buffer,buffer.length);

        socket.receive(packet);
        int len = packet.getLength();

        String rs = new String(buffer,0,len);
        System.out.println(rs);

        System.out.println("客户端的IP:"+packet.getAddress().getHostAddress());
        System.out.println("客户端的端口:"+packet.getPort());
        socket.close();
    }
}

多发多收

相比一收一发改进的地方:

  • 实现多次发送自定义信息
  • 输入stop 时候退出
实现多开


客户端:
java 复制代码
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

public class Client {
    public static void main(String[] args) throws Exception {

        //创建客户端对象
        DatagramSocket socket = new DatagramSocket();

       /*  public DatagramPacket(byte buf[], int length,
        InetAddress address, int port) */
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请输入数据:");
            String msg = sc.nextLine();

            if (msg.equals("stop")) {
                break;
            }

            byte[] bytes = msg.getBytes();
            DatagramPacket packet = new DatagramPacket(bytes,bytes.length, InetAddress.getLocalHost(),6666);

            socket.send(packet);
        }

        System.out.println("感谢使用!!!");
        socket.close();
    }
}
服务端

服务端一般是不关闭的。

java 复制代码
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class Server {
    public static void main(String[] args) throws Exception {
        DatagramSocket socket = new DatagramSocket(6666);
        System.out.println("服务端启动");
        while (true) {
            //创建一个数据包对象,用于接受数据
            byte[] buffer = new byte[1024 * 64];
            DatagramPacket packet = new DatagramPacket(buffer,buffer.length);

            socket.receive(packet);

            int len = packet.getLength();

            String rs = new String(buffer,0,len);
            System.out.println(rs);

            System.out.println("客户端的IP:"+packet.getAddress().getHostAddress());
            System.out.println("客户端的端口:"+packet.getPort());
        }
//        socket.close();
    }
}
相关推荐
aixingkong9211 小时前
Nvidia为例 XPU的Multi-Host、Socket Direct 、GPUDirect、RDMA 技术点分析
服务器·网络·硬件架构·硬件工程
user_admin_god2 小时前
第 10 篇:拼上下文与生成——预算、边界与防幻觉
java·人工智能·spring boot·语言模型
用户3126874877202 小时前
GC 算法与垃圾收集器演进:从 Serial 到 ZGC
java
今年下半年2 小时前
记录一次IBMS物联网项目的架构设计及技术栈应用
物联网·websocket·网络协议·tcp/ip·微服务·udp·kafka
天天被压力2 小时前
【别再到处找免费股票数据API了:官方204个接口,32篇一次讲透 #02】涨停跌停与特色股池:5类股池接口一次拉全
java·人工智能·python
斯维赤2 小时前
从 @Tool 到 Agent 流水线:LangChain4j 进阶教学,一个库打全套
java·后端
SimonKing2 小时前
SSE项目`nexus-sse`持续优化,不一样的视觉效果
java·后端·程序员
斑鸠喳喳2 小时前
读写锁模式 Read-Write Lock
java·后端
信誓旦旦的程序猿3 小时前
【Python 量化取数指南 #09】Python 拿港股通数据:港股通成交与港股财报实测
java·python·股票数据api·股票数据·股票数据api接口·股票api数据接口·股票量化数据api
小程序设计4 小时前
本科毕设避坑|大数据 / 单片机物联网 / 网络工程 / PLC / 机械设计选题与落地心得
java·hive·hadoop·单片机