Java进阶学习笔记98——UDP通信

UDP通信:

特点:无连接、不可靠通信。

不事先建立连接:发送端每次要把发送的数据(限制在64KB内),接收端IP、等信息封装在一个数据包中,发出去就不管了。

Java提供了一个java.net.DatagramSocket类来实现UDP通信。

Client客户端程序:

package cn.chang.d2_udp1;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 * 目标;完成UDP通信快速入门,实现1发1收。
 */
public class Client {
    public static void main(String[] args) throws Exception {
        // 1. 创建客户端对象(发韭菜出去的人)
        DatagramSocket socket = new DatagramSocket();

        // 2. 创建数据包对象封装要发出去的数据(创建一个韭菜盘子)
        // public DatagramPacket(byte buf[], int length,
        //                          InetAddress address, int port)
        // 参数1: 封装要发出去的数据
        // 参数2: 发送出去的数据大小(字节个数)
        // 参数3: 服务端的IP地址(找到服务器主机)
        // 参数4: 服务端程序的端口
        //
        byte[] bytes = "我是快乐的客户端,我爱你ABC。".getBytes();
        DatagramPacket packet = new DatagramPacket(bytes, bytes.length, InetAddress.getLocalHost(), 6666);

        // 3. 开始正式发送这个数据包的数据出去了。
        socket.send(packet);

        System.out.println("客户端数据发送完毕~~");
        socket.close();   // 释放资源
    }
}

Server服务端代码:

package cn.chang.d2_udp1;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

/**
 * 目标: 完成UDP通信快速入门-服务端开发
 */
public class Server {
    public static void main(String[] args) throws Exception {
        System.out.println("===正式启动服务端===");
        // 1. 创建一个服务端对象,创建一个接韭菜的人
        DatagramSocket socket = new DatagramSocket(6666);

        // 2. 创建一个数据报对象,用于接收数据
        byte[] buffer = new byte[1024 * 64];    // 64KB
        DatagramPacket packet = new DatagramPacket(buffer, buffer.length);

        // 3. 正式使用数据包接收客户端发送来的数据
        socket.receive(packet);

        // 4. 从字节数组中,把接收到的数据直接打印出来。
        // 接受多少就倒出多少
        // 获取本次数据包接收了多少数据
        int len = packet.getLength();
        String res = new String(buffer, 0, len);
        System.out.println(res);

        System.out.println(packet.getAddress().getHostAddress());   // 拿到客户端的IP地址
        System.out.println(packet.getPort());                       // 拿到客户端的端口

        socket.close();
    }
}

先运行服务端,然后再运行客户端。

运行结果:

服务端:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值