java基础-网络编程-UDP

网络编程:在网络通讯协议下,不同计算机上运行的程序,进行的数据传输

应用场景:即时通信、网游对战、金融证券、国际贸易、邮件等等。

不管是什么场景,都是计算机跟计算机之间通过网络进行数据传输

java中可以使用java.net包下的技术轻松开发出常见的网络应用技术

网络编程三要素:

IP:设备在网络中的地址,是唯一的标识

端口:应用程序在设备中唯一标识

协议:数据在网络中传输的规则,常见的协议有UDP、TCP、Http、https、ftp

三要素:IP

全称是:Internet protocol,是互联网协议地址,也称为IP地址

是分配给上网设备的数字标签

通俗理解:IP是上网设备在网络中的地址,是唯一的

常见的IP分类:ipv4、ipv6

IPV4的一些细节:

三要素:端口号

应用程序在设备中的唯一标识

端口号:由两个字节标识的整数,范围在0~65535

其中0~1023的端口号是一些知名的网络服务或者应用的

我们使用1024及以上端口号就可以了

注意:一个端口号只能被一个应用使用

三要素:协议

UDP协议:

复制代码
UDP发送:
package Day18_net;

import java.io.IOException;
import java.net.*;
import java.nio.charset.StandardCharsets;

public class NetTest02 {
    public static void main(String[] args) throws IOException {
        //UDP发送数据
        //1、创建DatagrameSocket对象
        //细节:绑定端口,以后我们就是通过这个端口往外发送数据
        //空参:所有可用端口中随机选择一个进行使用
        //有参:指定端口号进行绑定
        DatagramSocket ds = new DatagramSocket();
        //2、打包数据
        String str="你好";
        byte[] bytes = str.getBytes(StandardCharsets.UTF_8);
        //指定发送给哪台电脑
        InetAddress address = InetAddress.getByName("127.0.0.1");
        int port = 10086;
        DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);
        //3、发送数据
        ds.send(dp);
        //4、释放资源
        ds.close();
    }
}
复制代码
UDP接收:
复制代码
package Day18_net;

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

public class NetTest03 {
    public static void main(String[] args) throws IOException {
        //UDP接受数据
        //1、创建DatagrameSocket对象
        //细节:在接收的时候一定要绑定端口,而且绑定的端口要和发送的端口保持一致
        DatagramSocket ds = new DatagramSocket(10086);
        //2、接收数据
        //细节:要新建一个箱子来接收数据
        byte[] bytes = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
        //这里的消息是阻塞的,程序会在这里一直死等
        ds.receive(dp);
        //3、解析数据包
        byte[] data = dp.getData();//字节数组
        int length = dp.getLength();
        InetAddress address = dp.getAddress();
        int port = dp.getPort();
        System.out.println("接收到数据:"+new String(data,0,length));
        System.out.println("该数据是从"+address+"这台电脑中的"+port+"端口发出的");

        ds.close();
    }
}

这里有个细节:要先执行接收程序,再执行发送程序

聊天室:

复制代码
package Day18_net;

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

public class NetSentTest01 {
    public static void main(String[] args) throws IOException {
        //1、创建对象:需要指定接收端口
        DatagramSocket ds = new DatagramSocket(10086);
        //2、接收数据
        //2.1、新建一个字节数组
        byte[] bytes = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
        //3、接收数据
        while (true) {
            ds.receive(dp);
            //4、接收数据后解析数据
            byte[] data = dp.getData();
            InetAddress address = dp.getAddress();
            String hostName = dp.getAddress().getHostName();
            String ip = dp.getAddress().getHostAddress();
            System.out.println("ip为:"+ip+"主机名为"+hostName+"发送了数据"+new String(data,0,dp.getLength()));
        }


    }
}
复制代码
package Day18_net;

import java.io.IOException;
import java.net.*;
import java.util.Scanner;

public class NetServiceTest01 {
    public static void main(String[] args) throws IOException {
        //1、创建对象
        DatagramSocket ds = new DatagramSocket();
        //2、创建要发送的数据
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请输入要录入数据");
            String str = sc.next();
            if(str.equals("886")){
                break;
            }
            //3、变成字节数组
            byte[] bytes = str.getBytes();
            //4、指定要发送的ip
            InetAddress address = InetAddress.getByName("127.0.0.1");
            //5、指定端口
            int port=10086;
            //6、打包数据
            DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);
            //7、发送数据
            ds.send(dp);
        }
        //8、发送完后关闭资源
        ds.close();
    }
}

UDP的三种通信方式

单播:一对一发送信息

组播:一台电脑可以对一组电脑发送信息

下面的是接受端,如果有多个接收端,就可以同样copy相同的代码,然后都添加到224.0.01这一组中

广播:一台电脑给局域网中全部电脑发送信息

相关推荐
andxe30 分钟前
安科士 AndXe 技术博客:400G QSFP112 SR4 光模块|AI 算力与超算短距互联最优方案
网络·人工智能·光模块·光通信
shiyi.十一1 小时前
第2章:应用层 — 知识要点与架构
网络·计算机网络·架构
DFT计算杂谈2 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
中微极客4 小时前
2026主流AI Agent框架技术选型与性能对比
运维·网络·人工智能
猿的天空8 小时前
机器人双手迎来全栈训练系统:灵初智能EgoSteer让灵巧手无所不能
网络·人工智能·计算机·ai·程序员·机器人·编程
Xzaveir_7778 小时前
OPPO、vivo、荣耀号码认证:多终端拨测矩阵与异常复现
大数据·网络·科技·矩阵·产品经理·ai-native
wuqingshun3141598 小时前
从网络角度来看,用户从输入网址到网页显示,期间发生了什么?
网络
牛马工作号8 小时前
Zigbee 专业详解:从协议到排障
网络·物联网·安全
牛马工作号8 小时前
Wi‑Fi 完全指南:从 802.11 协议到 Wi‑Fi 7、AC+AP 与 Mesh 工程组网
网络·网络协议·智能路由器
智慧光迅AINOPOL9 小时前
智慧工厂全光网怎么扛住AGV与强电磁?光电复合缆与工业级方案
网络·全光网解决方案·全光网·酒店全光解决方案·泛住宿全光网解决方案