Java入门案例:网络编程UDP协议之发送和接收数据升级练习

本文详细介绍了一个UDP通信的具体案例,包括发送端与接收端的代码实现。案例中,发送端发送特定信号后,等待接收端反馈相同信号,双方完成通信后自动结束程序。文章通过实例加深了读者对UDP数据包发送和接收机制的理解。

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

案例需求:发送端发出“886”后,需收到并显示接收端回复的一个“886”,然后两边都结束通信;

分析:

本案例在于提高对于UDP发送和就收数据的方法使用的熟练度和逻辑分析能力;

①发送端:在发送端代码中加入判断,如果发送的是886,就在对方回复886后结束程序;

②接收端:判断接收到的数据,如果是886,就回复一个886并结束程序

③端口号已绑定:在发送端接收反馈时,接收用的端口不能和发送端口相同;同理,接收端反馈用的端口和接收端口不能相同;

①发送端代码:

package Anli.UDP;

import java.io.*;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

/*
UDP发送端
 */
public class case02send {
    public static void main(String[] args) throws IOException {
        //创建套接字对象Socket
        DatagramSocket ds;
        DatagramPacket dp;
        while (true) {
            //自己封装键盘录入数据
            BufferedReader bis = new BufferedReader(new InputStreamReader(System.in));
            System.out.print("在此输入:");
            String s = bis.readLine();

            //将键盘录入的数据封装到一个字节数组中
            byte[] bys = s.getBytes();

            //创建Packet对象
            dp = new DatagramPacket(bys, bys.length, InetAddress.getByName("192.168.1.11"),10086);

            //发送数据
            new DatagramSocket().send(dp);
            System.out.println("发送成功");
            //判断:输入的是886,就接收对方的反馈,结束程序
            if ("886".equals(s)) {
                ds = new DatagramSocket(10096);
                bys = new byte[1024];
                dp = new DatagramPacket(bys, bys.length);
                ds.receive(dp);
                String ss = new String(dp.getData(), 0, dp.getLength());
                System.out.println(ss);
                System.exit(0);
            }
        }
    }
}

②接收端代码:

package Anli.UDP;

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

/*
UDP接收端
 */
public class case02receive {
    public static void main(String[] args) throws IOException {
        //创建Socket对象
        DatagramSocket ds = new DatagramSocket(10086);

        //创建数据包用于保存接收到的数据
        byte[] bys = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bys, bys.length);
        while (true) {
            ds.receive(dp);
            String s = new String(dp.getData(), 0, dp.getLength());
            //判断:对方如果发送886,就回一个886并结束程序
            if ("886".equals(s)) {
                byte[] by = "886".getBytes();
                dp = new DatagramPacket(by, by.length, InetAddress.getByName("192.168.1.11"), 10096);
                ds.send(dp);
                System.exit(0);
            }

            System.out.println(InetAddress.getByName("192.168.1.11").getHostName() + ":" + s);
        }
    }
}

结果显示:

发送端:接收端:

欢迎大佬们前来指教,不胜感激!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

劉鎠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值