3. 网络编程
3.1计算机之间通信需要的条件
3.1.1 IP地址
IP地址指的是互联⽹地址(Internet Protocol Address ) ,是联⽹设备与互联⽹之间的 唯⼀标识,在同⼀个⽹段中,IP地址是唯⼀的
IP地址是数字型的,是⼀个32位的整数,通常将其分成4个8位的⼆进制数,每8位之 间⽤圆点隔开, 每个8位整数可以转换为⼀个0~255的⼗进制整数,例 如:202.9.128.88
标准分类:分为IPV4和IPV6
IP地址使⽤范围分类
A类:保留给政府结构,1.0.0.1 ~ 126.255.255.254
B类:分配给中型企业,128.0.0.1 ~ 191.255.255.254
C类:分配给任何需要的个⼈,192.0.0.1 ~ 223.255.255.254
D类:⽤于组播,224.0.0.1 ~ 239.255.255.254
E类:⽤于实验,240.0.0.1 ~ 255.255.255.254
回收地址:127.0.0.1,指本地机,⼀般⽤于测试使⽤
IP地址可以唯⼀的确定⽹络上的⼀个通信实体,但⼀个通信实体可以有多个通信程序 同时提供⽹络服务,此时还需要使⽤端⼝
3.1.2 端口
数据的发送和接收都需要通过端⼝出⼊计算机,端⼝号⽤于唯⼀标识通信实体上进⾏ ⽹络通讯的程序,同⼀台机器上不能两个程序占⽤同⼀个端⼝
端口号的取值范围:0~65535
端口分类:
公认端口:0~1023
注册端口:1025~49151
动态或私有端口:1024~65535
常用端口:
mysql:3306
oracle:1521
tomcat:8080
3.1.3 通信协议*
需要通信的设备之间需要实现相同的通信协议
⽹络分层(七层协议):物理层,数据链路层,⽹络层,传输层,会话层,表示层,应⽤层
通信协议分类:
传输层协议:TCP和UDP
网络层IP协议:IPV4和IPV6,互联⽹协议
应用层协议:HTTP
-
七层协议:
应用层
与其它计算机进⾏通讯的⼀个应⽤,它是对应应⽤程序的通信服务的。 例如,⼀个 没有通信功能的字处理程序就不能执⾏通信的代码, 从事字处理⼯作的程序员也不 关⼼OSI的第7层。但是,如果添加了⼀个 传输⽂件的选项,那么字处理器的程序员 就需要实现OSI的第7层。 示例:TELNET,HTTP,FTP,NFS,SMTP等。
表示层
这⼀层的主要功能是定义数据格式及加密。例如,FTP允许你选择以⼆进制 或ASCII 格式传输。如果选择⼆进制,那么发送⽅和接收⽅不改变⽂件的内容。 如果选择 ASCII格式,发送⽅将把⽂本从发送⽅的字符集转换成标准的ASCII后 发送数据。在接 收⽅将标准的ASCII转换成接收⽅计算机的字符集。示例:加密,ASCII等。
会话层
它定义了如何开始、控制和结束⼀个会话,包括对多个双向消息的控制和管理, 以 便在只完成连续消息的⼀部分时可以通知应⽤,从⽽使表示层看到的数据是连续的, 在某些情况下,如果表示层收到了所有的数据,则⽤数据代表表示层。示例:RPC, SQL等。
传输层
这层的功能包括是否选择差错恢复协议还是⽆差错恢复协议,及在同⼀主机上对不同 应⽤的数据流的输⼊进⾏复⽤,还包括对收到的顺序不对的数据包的重新排序功能。 示例:TCP,UDP,SPX。
网络层
这层对端到端的包传输进⾏定义,它定义了能够标识所有结点的逻辑地址,还定义了 路由实现的⽅式和学习的⽅式。为了适应最⼤传输单元⻓度⼩于包⻓度的传输介质, ⽹络层还定义了如何将⼀个包分解成更⼩的包的分段⽅法。示例:IP,IPX等。
数据链路层
它定义了在单个链路上如何传输数据。这些协议与被讨论的各种介质有关。示例: ATM,FDDI等。
物理层
OSI的物理层规范是有关传输介质的特性标准,这些规范通常也参考了其他组织制定 的标准。 连接头、帧、帧的使⽤、电流、编码及光调制等都属于各种物理层规范中 的内容。 物理层常⽤多个规范完成对所有细节的定义。示例:Rj45,802.3等。
3.1.4 客户端和服务器
客户端:可以让⽤户直接交互,⽤来访问服务器端
服务器端:给⽤户提供数据的存储,数据的中转,数据的运算
注意:
1.客户端服务器端都是指的是应⽤(app),⽽⾮主机,即 客户端!=主机 服务器端!=主机
2.⼀台主机上可以同时运⾏多个应⽤
3.⼀台主机上可以同时存储客户端和服务器端,也可以分属于不同的主机
4.应⽤就是⼀个进程,所以客户端和服务器端都是独⽴的进程
3.1.5 网址理解
⽹址案例: "https://www.baidu.com:80/ewf/sdf?name=bingbing&age=20"
⽹址的功能:实现客户端与服务器端的通信
协议:是制定⼀个统⼀的规范 http协议:超⽂本传输协议,实现的是⽹络间的通信的⼀个通信规则
https协议:安全的http协议---可以省略,默认是http协议
域名/IP:标记⽹络上的唯⼀⼀台主机 可以简化写:baidu
端⼝号:标记同⼀台主机上的某⼀个服务器 [0,65536]---可以省,默认80
资源路径: 可以省
查询条件: 可以省
3.1.6网络相关概念
1.外⽹:IP是唯⼀性,不能重复。范围:0.0.0.0~255.255.255.255
2.内⽹:通过路由器或者交换器设备,来重新设置IP地址。
不同的内⽹的ip可以相同。内⽹A的某⼀台主机通过⾃⼰的⽹卡与⾃⼰的路由器A通 信,然后路由器A通过⽹络中⼼与路由器B通信,路由器B再与内⽹中的某⼀台机器的⽹卡通信。
3.IP: ip地址是确定⼀台机器的唯⼀标识符
4.NETMASK(⼦⽹掩码):与ip连⽤,⽤于确定⽹络段位 192.168.1.x 范围:1-254 255.255.255.0
⼦⽹掩码有1的位置对应ip的部分就是⽹络段位。0对应的位置就是内⽹中主机的位 置。
⼦⽹掩码作⽤:⽤来指定当前机器属于哪个ip号段的
判断⽅式:将当前的ip的⼆进制按位与⼦⽹掩码的⼆进制等于⽹段地址
如: 192.168.1.2 & 255.255.255.0 = 192.168.1.0
5.GATEWAY:⽹关,⽤于与连接外⽹的机器设备通信(路由器)换句话说,⽹关就是 路由器的IP
6.DNS:域名解析服务器 119.75.217.109 www.baidu.com
3.1.7设备介绍
1.路由器 路由器是连接两个或多个⽹络的硬件设备,在⽹络间起⽹关的作⽤,是读取每⼀个数 据包中的地址然后决定如何传送的专⽤智能性的⽹络设备。它能够理解不同的协议, 例如某个局域⽹使⽤的以太⽹协议,因特⽹使⽤的TCP/IP协议。这样,路由器可以分 析各种不同类型⽹络传来的数据包的⽬的地址,把⾮TCP/IP⽹络的地址转换成TCP/IP 地址,或者反之;再根据选定的路由算法把各数据包按最佳路线传送到指定位置。所 以路由器可以把⾮TCP/ IP⽹络连接到因特⽹上。
2.交换机 交换机(Switch)意为“开关”是⼀种⽤于电(光)信号转发的⽹络设备。它可以为接 ⼊交换机的任意两个⽹络节点提供独享的电信号通路。最常⻅的交换机是以太⽹交换 机。其他常⻅的还有电话语⾳交换机、光纤交换机等。
3.Modem 调制解调器(英⽂名Modem),俗称“猫”,是⼀种计算机硬件.它能把计算机的数字 信号翻译成可沿普通电话线传送的脉冲信号,⽽这些脉冲信号⼜可被线路另⼀端的另 ⼀个调制解调器接收,并译成计算机可懂的语⾔。 计算机内的信息是由“0”和“1”组成数字信号,⽽在电话线上传递的却只能是模拟电信 号。于是,当两台计算机要通过电话线进⾏数据传输时,就需要⼀个设备负责数模的 转换。
4.虚拟机 虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运⾏在⼀ 个完全隔离环境中的完整计算机系统。在实体计算机中能够完成的⼯作在虚拟机中都 能够实现。在计算机中创建虚拟机时,需要将实体机的部分硬盘和内存容量作为虚拟 机的硬盘和内存容量。每个虚拟机都有独⽴的CMOS、硬盘和操作系统,可以像使⽤ 实体机⼀样对虚拟机进⾏操作。
4.反射
实现原理分析 实现过程:
1.获取字节码⽂件对象
2.通过字节码⽂件对象获取对应的实例对象
3.给属性赋值(通过从属性中提取出来的类--Field)
4.调⽤⽅法(通过从⽅法中提取出来的类-- Method)
返回参数 | 方法名 | 描述 |
---|---|---|
static Class<?> | forName(String className) | 回与带有给定字符串名的类或接口相关联的 Class 对象。 |
Constructor<T> | getConstructor(Class<?>... parameterTypes) | 返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法。 |
Field | getField(String name) | 返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段。 |
Field | getDeclaredField(String name) | 返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。(含有Declared无视权限) |
Method | getMethod(String name, Class<?>... parameterTypes) | 返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。 |
Method | getDeclaredMethod(String name, Class<?>... parameterTypes) | 返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。(含有Declared无视权限) |
String | getName() | 以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。 |
Package | getPackage() | 获取此类的包。 |
T | newInstance() | 创建此 Class 对象所表示的类的一个新实例。 |
invoke |