网络编程和反射的基本知识点的总结

1.网络编程
1.网络:
就是不同地域,不同型号,不同ip等多态计算机相互连接沟通形成的通信系统
2.元素:
看的见的元素:
网线、交换机、计算机、内存条等一系列的硬件设备
看不见的元素:
传输协议、io流、运行的程序
3.概念:
基于计算机网络来进行数据的接收发送,处理等操作的过程中,使用编程语言来实现
4.三要素:
ip地址、端口号、传输协议
5.IP地址:
概述:
计算机在网络中ip协议分配给每一台计算机的唯一标识。
作用:可以准确定位计算机的位置
分类:
ipv4:是由四个字节组成的一段序列
ipv6:是由8组16进制的数组组成的一段序列
6.端口号【重点】:
概述;
是计算机中正在运行的进程的编号。端口号不可以重复。它是由2个字节大小的数字来表示,0-65535的范围
作用:
能够通过他准确的找到计算机中正在运行的进程
端口号的分配:
1.程序在启动的时候计算机随机自动分配端口号
2.程序人为的指定端口号。比如:mysql的3306端口号设置
常用的端口号:
mysql:3306
oracle:1521
tomcat:8080
QQ:4000
7.通信协议:
概述:
数据在传输过程中接收、发送、处理等操作是有规则。不同的场景有不同的协议,往往不同的协议协同合作维护网络编程的环境
网络分层:
应用层:分工作业
传输层:把数据从一端传到另一端 TCP协议 UDP协议
网络层; ip协议
物理层:相关的硬件设施
8.InetAddress类:
1.概述:
此类表示互联网协议(ip)地址。【对ip的相关特征和行为的描述,一般包括主机和ip地址】
2.获取对象的方式:【静态方法】
getAllByName(String host):通过主机 名称获取对应的所有ip地址对象的数组
getByAddress(byte[] addr):通过ip地址的字节数组获取ip地址的对象
getByAddress(String host,byte[] addr):通过主机名称和ip地址的字节数组获取ip地址的对象
getByName(String host):通过主机名称获取对应ip地址对象
getLocalHost():获取本地主机的ip对象
3.获取对象的属性常用方法:
getAddress():返回对象的原始ip地址
getHostName():返回对象的主机名称
toString():将ip地址转换为字符串

2.UDP协议和TCP协议
概述:是传输层的协议,是数据端到端的协议
**UDP:**是面向无连接的协议。不用断喝端之间联系就可以进行数据的传输。不管对方是否在线。直接操作数据。到那时安全性低,效率高【不存在客户端和服务段】,只有发送端和接收端
特点:1.数据不安全;2.效率高
TCP:
概述:面向连接的传输协议。要求对方必须 在线并且连接成功。区分客户和服务,把发送数据端叫做客户端,接受数据端叫做服务端。
连接过程:
三次握手:
第一次:发送端发送信号给接收端
第二次:接收端接受到信号给出回应
第三次:发送端收到回应确定连接成功
特点:
1.数据安全性有保证
2.效率低
Socket编程【套接字编程】
1.套接字的概述:
传输层编程是端到端的编程,套接字就是端到端进行交流的中间服务
2.不同的协议下使用的套接字不一样:
UDP协议:DatagramSocket
TCP协议:
客户端:Socket
服务段:ServerSocket
UDP编程
关键字:
DatagramSocket:它是UDP编程的套接字,此类表示用来发送和接收数据报包的套接字
数据报包:【DatagramPacket】:指包装了发送的数据和接收数据的一个容器。【发送和接收的内容、发送的ip地址、端口号等内容】
构造方法
DatagramSocket():获取套接字对象【一般用于发送端】
DatagramSocket(int port):获取套接字对象【一般用于接收端】
常用方法:
1.send(DatagramPacket dp):发送数据报包出去
2.receive(DatagramPacket dp):接收数据报包 DatagramPacket
方法详解:
DatagramPacket(byte[]buf,int offset,int length,InetAddress address ,int port):用于发送端
说明:
buf:存放发送或接收数据内容的字节数组
offset:buf数组从那个角标开始发送或接收,代表开始的角标值
length:代表发送内容的长度,或者接受数组长度
address:发送端发送目标ip地址
port:发送的目标端口号
数据报包的常用方法:
getData():获取数据报包中的内容数组
getLength():获取数据报包中有效内容的长度
发送端编写步骤:
1.获取套接字对象
2.准备发送的相关数据
3.获取数据报包同时封装发送的数据
4.发送数据报包
5.准备接受数据的容器【字节数组相关数据】
6.准备一个接收数据的数据报包
7.接收数据
8.解析数据
DatagramPacket(byte[] buf,int offset,int length):用于接收端
接收端编写步骤:
1.获取套接字
2.准备接受容器【字节数组的相关数据】
3.接收数据到数据报包
4.解析接收到的数据【数据报包方法】
5.准备回应的内容【字节数组】
6.将内容添加到接收使用的数据报包中
7.将该数据报包发送回发送端
Tcp编程:
1.客户端:
Socket:此类实现客户端套接字。
构造方法:
Socket(InetAddress address,int port)创建套接字对象,包含了目标的ip和端口号
发送和接收数据采用的是io流技术,套接字发送和接受数据,先获取对应的流对象
常用功能:
getOutputStream():获取字节输出流【专门使用在客户端和服务端流的目标就是客户端和服务端】
getInputStream():获取字节输入流
2.服务端
ServerSocket:
此类实现服务器套接字。服务器套接字等待请求通过网络传入。他基于该请求执行某些操作,然后可能向请求者返回结果
某些操作:
ServerSocket套接字侦听客户端套接字是否入侵服务段,侦听客户端的套接字,要和该套接字交流,找一个和客户端同一类型的套接字对象
构造方法:
ServerSocket(int port):创建服务端的套接字对象【内含端口号】
常用方法:
accept():获取一个和客户端类型一致的套接字对象
3.TCP客户端的步骤
1.创建Socket套接字对象
2.获取字节输出流
3.使用输出流写出内容
4.获取字节输入流
5.创建读取内容的字节数组
6.读取内容
7.解析内容
8.关闭流资源
4.TCP服务端步骤
1.创建ServerSocket套接字对象
2.提供Socket套接字对象【好和客户端的套接字交流】
3.获取字节输入流
4.创建读取内容的字节数组
5.读取内容
6.解析内容
7.获取字节输出流
8.使用输出流写出内容
9.关闭流资源

3.反射【正向运行的逆过程】
1.概述:
在程序运行过程中可以对任意类型中的任意资源进行操作,这种动态获取或操作资源的行为就叫做反射
2.场景:
在不知道操作类型的基础进行操作采用反射,只有在要运行的时候才知道类型
3.正向:
编写源代码->编译成字节码文件->jvm加载字节码文件启动运行->创建对象或类名->调用对应的方法和属性运行
4.反射:
代码在运行的过程中直接获取到字节码文件对象->通过字节码文件对象获取对应的元素的对象->通过元素对象调用对应的方法开始执行功能
5.字节码文件对象:
字节码文件在内存中的对象表现形式
6.jvm加载.class文件的处理机制:
1.jvm通过类加载器将字节码文件以对象的形式加载到内存中
2.jvm加载之后对这个Class对象的内容进行分类管理【属性、成员方法构造方法】
3.jvm把这些类分别描述为对应的类型【属性对应Filed、方法对应的类Method、构造对应的类Constract】
7.执行的顺序:
jvm加载字节码文件创建Class对象,Class对象去统筹属性、方法、构造各自类的对象来进行操作
8.反射的好处:
1.解耦合,利于编程
2.提高代码的维护性。【实现代码和维护的分离】
9.使用反射技术的步骤:
1.获取Class对象【获取那个字节码文件的对象】
2.通过字节码文件对象获取要操作的元素的对象
3.使用元素对象调用对应的方法来执行相关的功能
10.获取类的字节码对象的三种方式:
①:对象名称.getClass():直接获取对象对应类型的字节码文件对象
②:类名.class:直接获取到类型的字节码文件对象
③:Class.forName(String pathName):根据pathName来创建对应类型的字节码文件对象
注意:pathName:指一个类的全名称【全限定类名:包路径+类名】
11.反射获取类中的公共构造方法和使用
1.如何获取构造方法对象?
getContructor(Class params):根据参数的类型及个数返回对应的构造方法对象。只能获取到公共的构造方法
说明:params:指多个class类型的参数;params:传参的时候传的是构造方法形参类型字节码文件对象
getContructors():返回字节码文件对象中所用的构造方法对象
2.如何控制构造方法创建类型对象:
1.构造方法作用:创建对象并初始化值
2.使用Constructor类中的方法:
newInstance():创建构造对象所在的字节码文件对象对应类型的实例化对象【叫构造方法自己执行自己】
12.反射获取类中的成员变量和使用
1.如何获取公共权限成员变量【Field】对象?
getField(String name)根据给定的属性名获取对应属性的对象
getFields():获取所有公共的属性对象
13.获取类中的成员方法和执行
1.如何获取成员方法对象:使用class类中的方法:getMethod(String name,Class<?> parameter types):根据给定的名称和参数类型获取对应的方法对象
14暴力反射
1.通过Class类中:
getDeclareXxx方法:可以获取类中的所有声明的成员(属性、方法内部类),私有的成员也可以获取到
2.修改该对象的访问权限:(通过AccessibleObject类中的):
setAccessible(boolean b):改变对象的访问权限
isAccessible():判断对象是否可以访问。
15.例子说明:
正确编程的时候放不进去,因为list集合指定泛型为integer,在编译的过程中这个指定的泛型是起作用的,它是要去对放进来的数据进行类型和范围的审核,符合泛型类型的要求可以添加,不符合直接报错不让添加。泛型只在编译时期起作用,一旦类开始运行的时候。类加载到方法区泛型就消失。我可以在集合字节码文件被加载到方法去以后去给list添加元素,就不会有泛型的约束,就可以添加进去了
注意事项:泛型的擦除:到了运行时期泛型就不起作用【相当于消失】;;泛型只在编译时期起作用叫做伪泛型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值