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();
    }
相关推荐
贞明电子4 小时前
工业三色报警灯怎么接入项目系统?开关量与RS485控制应用指南
运维·网络·微信公众平台·贞明电子
代码山河4 小时前
Python就业方向全解析:后端、爬虫、数据分析、AI你选哪个?
python·学习·架构·教程·面向对象·项目
学长毕设4 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
HideF4 小时前
Linux
linux·服务器·网络
万联WANFLOW4 小时前
海外网络故障怎么排查?Cloudflare 三季度断网报告解读与 mtr 实战
运维·网络·故障分析
sbjdhjd4 小时前
网工进阶笔记:H3CSE 园区网全栈技术与协议汇总
网络·笔记·云计算·ssh·网络工程·vlan·aaa
释厄6235 小时前
AI学习层更新与跨体转移律——人类社会同构·不缺理解缺 U
人工智能·学习
zzu123zsw6 小时前
从臃肿的模板调用到声明式契约:深入 UniHttp 动态代理与多渠道生命周期扩展
java·spring boot·microsoft·unihttp
源码集结号6 小时前
云诊所门诊系统源码,基于SpringBoot+Vue.js架构,支持多租户设计与Docker容器化部署
java·spring boot·源码·医院信息系统·门诊系统·诊所系统
论文复现现场7 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算