Java学习笔记_Day37(网络编程)

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

常见的软件架构

C/S:在用户本地需要下载并安装客户端程序,在远程有一个服务器端程序

B/S:只需要一个浏览器,用户通过不同的网址,客户访问不同的服务器

BS的优缺点

  • 不需要开发客户端,只需要页面+服务端
  • 用户不需要下载,打开浏览器就能使用
  • 如果应用过大,用户体验收到影响

CS的优缺点

  • 画面精美,用户体验好
  • 需要开发客户端,也需要开发服务端
  • 用户需要下载和更新的时候太麻烦

网络编程三要素

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

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

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

1.常见的IP

IPv4:采用32位地址长度,分为4组,点分十进制表示法,总数有限,目前已经用完

127.0.0.1:本机IP,永远只会寻找当前所在本机

  • ipconfig:查看本机IP地址
  • ping:检查网络是否连通

InteAddress类:

IPv6:采用128位地址长度,分成8组,冒分十六进制表示法

2.端口号

两个字节表示的整数,取值范围:0~65535,我们自己使用1024以上的端口号就可以了

一个端口号只能被一个应用程序使用

3.协议

  1. UDP是面向无连接通信协议,速度快,有大小限制一次最多发送64K,数据不安全,容易丢失数据

UDP的三种通信方式:单播,组播,广播

  1. TCP是面向连接的通信协议,速度慢,没有大小限制,数据安全

UDP通信程序

1.发送数据

创建DatagramSocket对象

绑定端口:以后我们就是通过这个端口往外发送

空参:所有可用的端口随机一个进行使用

有参:指定端口号进行绑定

打包数据

释放资源

java 复制代码
public static void main(String[] args) throws IOException {
        DatagramSocket ds=new DatagramSocket();
        String str="hello";
        byte[] buf=str.getBytes();
        InetAddress address=InetAddress.getByName("127.0.0.1");
        int port=10086;
        DatagramPacket dp=new DatagramPacket(buf, buf.length, address, port);
        ds.send(dp);
        ds.close();
    }

2.接受数据

创建DatagramSocket对象

在接受的时候一定要绑定端口,一定要和发送的端口保持一致

接受数据包

解析数据包

释放资源

java 复制代码
 public static void main(String[] args) throws IOException {
        DatagramSocket ds=new DatagramSocket(10086);
        byte[] buf=new byte[1024];
        DatagramPacket dp=new DatagramPacket(buf,buf.length);
        ds.receive(dp);
        byte[] msg=dp.getData();
        int len=dp.getLength();
        InetAddress ip=dp.getAddress();
        int port=dp.getPort();
        System.out.println("接受到数据"+new String(msg,0,len));
        System.out.println("该数据是从"+ip+port+"这个端口发出的");
        ds.close();
    }
相关推荐
做个文艺程序员5 小时前
第04篇:K8s 弹性伸缩实战:HPA、VPA、KEDA——Java SaaS 应对流量洪峰的秘密武器
java·容器·kubernetes·弹性伸缩·自动扩容·ai 推理伸缩
稳联技术老娜9 小时前
DeviceNet主站怎么连接西门子PLC,Profinet网关配置手册(那智机器人)
服务器·网络·数据库
石山代码9 小时前
ArrayList / HashMap / ConcurrentHashMap
java·开发语言
AskHarries10 小时前
系统提示词、开发者指令和用户输入的优先级
java·前端·数据库
secondyoung11 小时前
Cortex-R52学习:MPU内存保护机制
arm开发·单片机·学习·arm·mpu
red_redemption11 小时前
自由学习记录(198)
学习
花岛溯11 小时前
Cursor 学习 DAY2·切换AI模型
学习
星夜夏空9911 小时前
FreeRTOS学习(9)——临界区
学习
daidaidaiyu11 小时前
ThingsBoard 规则链系统源码分析和自定义定时器
java
志栋智能11 小时前
AI驱动无代码:降低巡检超自动化的门槛
大数据·运维·网络·人工智能·自动化