JavaSE学习笔记 2023-12-25 --网络编程

二十、网络编程

« 上一篇
个人整理非商业用途,欢迎探讨与指正!!


文章目录

    • 二十、网络编程
      • 20.1网络
      • 20.2网络模型
        • 20.2.1 OSI参考模型
        • 20.2.2 TCP/IP参考模型
      • 20.3IP协议
        • 20.3.1什么是IP
        • 20.3.2IPV4和IPV6
        • 20.3.3IP的分类
        • 20.3.4回环地址/回路地址
        • 20.3.5ip相关指令
      • 20.4InetAddress类
      • 20.5端口号
      • 20.6通讯协议
      • 20.7TCP案例


20.1网络

计算机网络:为了实现资源的共享和信息的传递,通过通讯线路将若干台主机连接在一起
常见的计算机网络:
 互联网(Internet):点与点相连
 万维网(WWW World Wide Web):端与端相连
 物连网(IoT Internet of things):物与物相连
 网络编程:让计算机与计算机之间搭建连接,进行通讯

20.2网络模型

20.2.1 OSI参考模型

该模型定义了网络的七层架构:
 物理层 进行数据传输
 数据链路层 保证准确性
 网络层 分配IP地址
 传输层 通过网络协议传输数据(TCP协议,UPD协议)
 会话层 保持主机和主机之间的联系
 表示层 将数据加密或者解密
 应用层 指程序

20.2.2 TCP/IP参考模型

该模型使用OSI参数模型,分为四层:
 网络接口层:物理层 数据链路层
 网络层:
 传输层:
 应用层:会话层 表示层 层

20.3IP协议

20.3.1什么是IP

分配给每台计算机的唯一表示

20.3.2IPV4和IPV6

IPV4:4个字节,32位组成,每位0~255的
IPV6:16个字节,128组成,每位0~65535的

20.3.3IP的分类

A类:大型网络 网络地址.主机地址.主机地址.主机地址
B类:中型网络 网络地址.网络地址.主机地址.主机地址
C类:个人网络 网络地址.网络地址.网络地址.主机地址

20.3.4回环地址/回路地址

本机地址:127.0.0.1 域名:localhost

20.3.5ip相关指令

windows:ipconfig
liunx:ifconfig

20.4InetAddress类

Java中获取IP的类

public class Demo01 {public static void main(String[] args) throws UnknownHostException {
//		获取本机ipInetAddress localHost = InetAddress.getLocalHost();System.out.println(localHost);System.out.println(localHost.getHostName());System.out.println(localHost.getHostAddress());//		获取指定的主机ip信息localHost = InetAddress.getByName("www.baidu.com");System.out.println(localHost);System.out.println(localHost.getHostName());System.out.println(localHost.getHostAddress());System.out.println("======================");
//		获取指定ip地址的信息localHost = InetAddress.getByName("192.168.40.228");System.out.println(localHost);System.out.println(localHost.getHostName());System.out.println(localHost.getHostAddress());localHost = InetAddress.getByName("10.2.10.52");System.out.println(localHost);System.out.println(localHost.getHostName());System.out.println(localHost.getHostAddress());}
}

20.5端口号

每个设备程序在计算机上的唯一数字标识
端口号范围:0~65535
 公认端口号:0~1023
 注册端口号:1024~49151
 动态端口号:49151~65535
常见的端口号:
 mysql:3306
 oracle:1521
 redis:6379
 tomcat:8080
 web服务器:80
 ftp服务器:21
 自定义端口号:1024~65535

20.6通讯协议

TCP:
 面向连接,安全可靠,效率低,数据大小无限制
 打电话
UDP:
 面向无连接,不安全,效率高,数据大小64kb
 广播/对讲机

20.7TCP案例

案例一:

//	客户端:只有启动状态的服务器可以接收我们的请求
public class Client {public static void main(String[] args) throws Exception {
//		创建客户端Socket对象Socket socket = new Socket("192.168.40.172",6666);
//		创建Socket输出流OutputStream out = socket.getOutputStream();
//		写内容out.write("6666你好,我是客户端wxx".getBytes());System.out.println("我写完了...");
//		关闭资源out.close();socket.close();}
}
//	服务器端:启动状态
//	服务器端 ip:192.168.40.172 端口:6666
public class Server {public static void main(String[] args) throws Exception {
//		创建服务器端SocketServerSocket serverSocket = new ServerSocket(6666);
//		通过serverSocket创建Socket对象
//		接收到的信息,进行处理Socket accept = serverSocket.accept();
//		获取客户端发送的内容InputStream in = accept.getInputStream();byte[] bs = new byte[1024];int len;while( (len = in.read(bs)) != -1 ) {System.out.println(new String(bs,0,len));}in.close();accept.close();serverSocket.close();}
}

案例二:使用多线程完成

//	客户端:只有启动状态的服务器可以接收我们的请求
public class Client {public static void main(String[] args) throws Exception {
//		创建ScannerScanner scanner = new Scanner(System.in);while(true) {
//			创建客户端Socket对象Socket socket = new Socket("localhost",6666);
//			创建Socket输出流OutputStream out = socket.getOutputStream();System.out.println("你想说啥");String words = scanner.next();if("886".equals(words) || "拜拜".equals(words)) {
//				关闭资源out.close();socket.close();break;}//			写内容out.write(words.getBytes());System.out.println("我写完了...");
//			关闭资源out.close();socket.close();}scanner.close();}
}
//	服务器端:启动状态
//	服务器端 ip:192.168.40.172 端口:6666
public class Server {public static void main(String[] args) throws Exception {
//		创建服务器端SocketServerSocket serverSocket = new ServerSocket(6666);System.out.println("服务器已启动,等待您的输入...");while(true) {
//			通过serverSocket创建Socket对象
//			接收到的信息,进行处理Socket accept = serverSocket.accept();
//			获取ip信息String ip = accept.getInetAddress().getHostAddress();String hostName = accept.getInetAddress().getHostName();new Thread(new Runnable() {@Overridepublic void run() {try {InputStream in = accept.getInputStream();
//						转换流InputStreamReader reader = new InputStreamReader(in);
//						字符缓冲流BufferedReader br = new BufferedReader(reader);
//						读取内容String readLine = br.readLine();System.out.println(ip+":"+hostName+":"+readLine);br.close();in.close();accept.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} }}).start();}}
}

案例三:文件上传

//	客户端:只有启动状态的服务器可以接收我们的请求
public class Client {public static void main(String[] args) throws Exception {Socket socket = new Socket("192.168.40.172",6666);
//			创建Socket输出流OutputStream out = socket.getOutputStream();//		从当前电脑的本地上传一个文件FileInputStream in = new FileInputStream("file/1.jpg");//		边读边写byte[] bs = new byte[1024];int len;while( (len = in.read(bs)) != -1) {
//			写向服务器端out.write(bs,0,len);}//		告知服务器,我们写完了socket.shutdownOutput();//		等待服务器的返回信息InputStream input = socket.getInputStream();InputStreamReader reader = new InputStreamReader(input);BufferedReader br = new BufferedReader(reader);String str;while( (str = br.readLine()) != null) {System.out.println(str);}//			关闭资源br.close();reader.close();input.close();in.close();out.close();socket.close();}
}
//	服务器端:启动状态
//	服务器端 ip:192.168.40.172 端口:6666
public class Server {public static void main(String[] args) throws Exception {
//		创建服务器端SocketServerSocket serverSocket = new ServerSocket(6666);System.out.println("服务器已启动,等待您的输入...");while(true) {Socket accept = serverSocket.accept();new UploadThread(accept).start();}}
}class UploadThread extends Thread {private Socket socket;public UploadThread(Socket socket) {this.socket = socket;}@Overridepublic void run() {try {
//			读取流InputStream in = socket.getInputStream();//			写入到指定的位置FileOutputStream out = new FileOutputStream("upload/"+UUID.randomUUID().toString()+".jpg");byte[] bs = new byte[1024];int len;while( (len = in.read(bs)) != -1) {out.write(bs, 0, len);}
//			向客户端返回信息OutputStream outputStream = socket.getOutputStream();outputStream.write("success!您的文件以上传成功".getBytes());outputStream.close();out.close();in.close();socket.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/597306.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

卷麻了,00后测试用例写的比我还好,简直无地自容...........

经常看到无论是刚入职场的新人,还是工作了一段时间的老人,都会对编写测试用例感到困扰?例如: 如何编写测试用例? 作为一个测试新人,刚开始接触测试,对于怎么写测试用例很是头疼,无法…

私域和微商有什么区别?

私域和微商到底有什么区别呢?其实这两个东西有着本质性区别。 私域: 通过原有商业或者新媒体方式获取粉丝或顾客,然后用微信等社交工具,多方位展现,人格专业。 最终目标是让粉丝或顾客成为品牌或IP的朋友&#xff0…

Ajax基础入门_Ajax概述,同步与异步,Axios的使用,JSON数据及FastJSON的使用

Ajax 文章目录 Ajax1 概述2 作用3 同步和异步3.1 同步3.2 异步 4 代码编写4.1 服务端4.2 客户端 5 Axios5.1 使用5.2 代码5.2.1 前端5.2.2 后端 5.3 请求方法别名 6 JSON6.1 概述6.2 JSON 基础语法6.2.1 定义格式6.2.2 js 对象与JSON的转换 6.3 发送异步请求携带参数6.4 JSON串…

机器学习(四) -- 模型评估(2)

系列文章目录 机器学习(一) -- 概述 机器学习(二) -- 数据预处理(1-3) 机器学习(三) -- 特征工程(1-2) 机器学习(四) -- 模型评估…

数据库——SQL DDLDML使用

1.实验内容及原理 1. 在 Windows 系统中安装 VMWare 虚拟机,在 VMWare 中安装 Ubuntu 系统,并在 Ubuntu 中搭建 LAMP 实验环境。 2. 使用 MySQL 进行一些基本操作: (1)登录 MySQL,在 MySQL 中创建用户,…

云原生架构未来发展趋势,探索容器技术未来的发展趋势

云原生架构未来发展趋势,探索容器技术未来的发展趋势 云原生架构未来发展趋势容器技术发展趋势无处不在的计算催生新一代容器实现深入分布式云(从多云/混合云,到分布式云)云原生操作系统Kubernetes已经成为云时代的操作系统从无状…

直流有刷电机的简单高性能控制方法

提出问题 在STM32——直流电机PI调速一文中推导了直流有刷电机的数学模型,在不考虑电流环的情况下,可做降阶处理,视同一个一阶系统,通过简单的 P I PI PI控制使得电机有着不错的响应,但仍然存在两个问题,一…

Unity游戏引擎的2D碰撞检测

碰撞检测算法是游戏开发中常用的一种算法,用于检测游戏中不同对象之间是否发生了碰撞。以下是几种常见的碰撞检测算法: 检测边界框(Bounding Box):这种算法是最简单和常见的碰撞检测算法之一。它基于对象的边界框&…

网站迁移和SEO:损害排名的常见错误

正在规划站点迁移? 迁移是更困难的 - 通常是可怕的 - SEO任务之一。 为了让它发挥作用,你需要避免常见的陷阱,这些陷阱可能会影响你的知名度,并导致流量和收入的损失。 8 月 11 日,我主持了一场赞助的搜索引擎杂志网…

火星文计算(100%用例)C卷 (JavaPythonC++Node.jsswift)

已知火星人使用的运算符为#、$,其与地球人的等价公式如下: x#y = 4*x+3*y+2 x$y = 2*x+y+3 1、其中x、y是无符号整数 2、地球人公式按C语言规则计算 3、火星人公式中,#的优先级高于$,相同的运算符,按从左到右的顺序计算 现有一段火星人的字符串报文,请你来翻译并计算结果…

PD SINK协议芯片系列产品介绍对比-ECP5701、FS312A、CH221K、HUSB238、AS225KL

目录 一、 ECP5701 二、 FS312A 三、 CH221K 四、 HUSB238 五、 AS225KL 在如今快节奏生活不断蔓延的背景下,人们对各种事情的处理也渐渐地开始要求在保证质量的情况下,不断加快。手机快充就是一个典型的例子,从开始的18W,30…

linux usb 驱动介绍

通用串行总线(USB)是一个在主机和许多外设之间的连接. 最初它被创建来替代许多慢速和不同的总线- 并口, 串口, 和键盘连接--有一个单个的所有设备都可以连接的总线类型. [45] USB 已经成长超出了这些 慢速连接并且现在支持几乎每种可以连接到 PC 的设备. USB 规范的最新版本增加…

java 16进制与10进制互相转换

十六进制是一种表示数字的进位制方法,可以表示09以及AF共16个字符,十六进制通常用于计算机中数据的表示,如内存地址等 10进制转16进制 Integer x 666; String hex x.toHexString(x); System.out.println(hex); 打印出来的信息是“29a”&a…

并行算法举例

谷歌的三大马车中的两辆分别是MapReduce GFS 这些我们在后边都会学到。 补充shuffle的作用 将map中的内容,具备相同内容的key被放到一组 问题1 矩阵乘法 第一轮j相同放在一起。 第二轮ik相同的放在一起。 问题2 求和问题 问题3 不重复元素

【机器学习基础】DBSCAN

🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏:机器学习 欢迎订阅!相对完整的机器学习基础教学! ⭐特别提醒:针对机器学习,特别开始专栏:机器学习python实战…

C++_string类

目录 一、string的模拟实现 1、初始化字符串 2、拷贝构造 3、赋值重载 4、迭代器 5、比较字符串 6、尾插字符、字符串 7、resize 8、中间插入数据、删除数据 8.1 插入数据 8.2 删除数据 9、查找数据 10、打印对象(流插入、流提取) 结语&a…

centos7部署minio单机版

一、目标 在centos7上部署minio单机版 二、centos7部署minio 1、下载minio mkdir /usr/local/minio cd /usr/local/minio wget https://dl.minio.io/server/minio/release/linux-amd64/minio chmod x minio 2、新建minio存储数据的目录 mkdir -p /data/minio/data3、新建…

sql语句条件查询,模糊查询

一.按条件表达式筛选 #案例1&#xff0c;查询工资>12000的员工信息 SELECT * FROM employees WHERE salary>12000; #案例2&#xff0c;查询部门编号不等于90号的员工名和部门编号SELECT last_name,department_idFROM employeesWHEREdepartment_id<>90;二 按逻辑表…

ASP.NETCore WebAPI 入门 杨中科

ASP.NETCore WebAPI入门1 回顾 mvc开发模式 前端代码和后端代码是混在一个项目之中 WEB API 1、什么是结构化的Http接口。Json。 2、Web API项目的搭建。 3、Web API项目没有Views文件夹。 4、运行项目&#xff0c;解读代码结构。 5、【启用OpenAPI支持】→>swagger,在界…

Spring的IOC解决程序耦合

目录 1.配置项目 1.1配置pom.xml 1.2Spring常用功能的Jar包依赖关系 1.3简单代码 2.IOC 2.1.applicationContext.xml 2.2.测试 3.DI 3.1概述 3.2.构造函数注入 3.3set方法注入 3.4自动注入 3.5注入集合类型的属性 1.配置项目 1.1配置pom.xml <?xml version&…