学习 Java UDP 小结

本文详细介绍了使用 Java 实现 UDP 客户端和服务端进行数据传输的过程,包括键盘输入、数据包创建、发送与接收等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//////////////////////////////////////////////////////////////////////////////////////////////////////////////

学习收获:

//////////////////////////////////////////////////////////////////////////////////////////////////////////////

1.

//定义一个输入 包的是键盘输入
            Scanner sc = new Scanner(System.in);
            //键盘输入存入字符串变量
            String content = sc.next();
            //字符串通过 getBytes() 方法获取字节 存入 buf 数组中
            byte[] buf = content.getBytes();


2.

//DatagramPacket p 内容转换成数组,测试 p 中的内容是否为空
            byte[] dataTest = p.getData();




//////////////////////////////////////////////////////////////////////////////////////////////////////////////

1.clientTest.java

//////////////////////////////////////////////////////////////////////////////////////////////////////////////

public class cilentTest {

    public static void main(String args[]) {

        try {
            //定义一个 DatagramSocket 对象
            DatagramSocket socket = new DatagramSocket();
            //定义一个输入 包的是键盘输入
            Scanner sc = new Scanner(System.in);
            //键盘输入存入字符串变量
            String content = sc.next();
            //字符串通过 getBytes() 方法获取字节 存入 buf 数组中
            byte[] buf = content.getBytes();
            //测试是否存入数组。。。忽略它 = =
            for(int i=0;i<buf.length;i++){
                System.out.println("buf 的值:"+ buf[i]);
            }
            //udp 只能传输不超过 64 kb 的文件
            if (buf.length > 1024 * 64) {
                System.out.println("输出内容超出 udp 长度");
                return;
            }
            //定义一个数据包 把 buf 数组的的内容,长度传进来
            DatagramPacket packet = new DatagramPacket(buf, buf.length);
            //设置访问的 IP 地址
            packet.setAddress(InetAddress.getByName("192.168.1.159"));
            //设置端口
            packet.setPort(5550);
            //把 packet 通过建立好的 socket 对象发送
            socket.send(packet);
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


//////////////////////////////////////////////////////////////////////////////////////////////////////////////

2.server.java

//////////////////////////////////////////////////////////////////////////////////////////////////////////////

public class server {

    /**
     * @param args
     */
    public static void main(String[] args) {

        try {
            //定义一个 DatagramSocket 对象 包含端口
            DatagramSocket s = new DatagramSocket(5550);
            //定义一个空的数组 并把它打包成 DatagramPacket 的数据包,此时 packet 是 null
            byte[] b = new byte[1024*64-1];
            DatagramPacket p = new DatagramPacket(b, b.length);
            //DatagramPacket p 内容转换成数组,测试 p 中的内容是否为空
            byte[] dataTest = p.getData();
            for (int i = 0; i < 10; i++) {
                System.out.println("packet 的内容:" + dataTest[i]);
            }

            System.out.println("等待接收数据包。。。");
            //通过 receie 方法把从客户端传来的 packet 接收
            s.receive(p);
            //读取接收的数据,存入数组
            byte[] date = p.getData();
            String str = new String(date);
            System.out.println("接收到" + p.getAddress().getHostAddress()
                    + "发送过来的数据报:" + str);
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值