第 26 节课 网络编程 映射

目录

Socket

Socket套接字:

UDP协议

UDP协议发送数据

UDP接收端接收数据:

多次运行接收端程序:

TCP协议

TCP协议传输发送数据端

类的加载器和反射

类的加载

class类:

获取class文件中的构造方法

暴力访问


Socket

Socket套接字:

网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别标识符套接字。

Socket原理机制:

通信的两端都有Socket。

网络通信其实就算Socket间的通信。

数据在两个Socket间通过IO传输。

=================================================================

UDP协议

将数据源和目的封装成数据包中,不需要建立连接;每个数据包的大小在限制在64k;因无连接,是不可靠协议;不需要建立连接,速度快。

UDP协议发送数据

1、建立发送端的Socket对象

2、创建数据,并将数据打包,设置端口号

3、通过调用Socket的发送方法将数据包发出去

4、释放资源,关闭Socket

UDP接收端接收数据:

1、创建接收端的Socket对象

2、创建一个接收包(接收数据容器)

3、调用Socket的接收方法接收数据 receive()

4、解析数据包,获取数据,显示在控制台

5、释放资源,关闭Socket

多次运行接收端程序:

java.net.BindException: Address already in use: Cannot bind

端口被占用异常

==================================================================

TCP协议

建立连接,形成传输数据的通道;在连接中进行大数据量传输;通过三次握手完成连接,是可靠协议;必须建立连接,效率会稍低。

TCP协议传输发送数据端

1、创建客户端的Socket对象

指定服务器的IP和端口,内部自动建立连接,一旦建立连接成功,说明与服务IO通道形成。

2、获取输出流,往IO通道写数据

3、释放资源

还未启动服务器就启动客户端报错:

java.net.ConnectException: Connection refused: connect

连接被拒绝

TCP协议一定要先启动服务器

TCP协议接收数据服务器端

1、创建服务器端的Socket对象 ServerSocket

2、监听客户端连接,返回一个对应的客户端的Socket对象

3、获取输入流对象,读取数据,显示在控制台上

4、释放资源

============================================================

类的加载器和反射

类的加载

当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。

加载:就是将class文件读入内存,并为之创建一个Class对象。

任何类被使用时系统都会建立一个Class对象。

连接: 验证 是否有正确的内部结构,并和其他类协调一致

准备 负责为类的静态成员分配内存,并设置默认初始化值

解析 将类的二进制数据中的符号引用替换为直接引用

初始化 :就是我们以前讲过的初始化步骤。

反射:就是通过class文件对象去使用该文件中的成员变量,构造方法,成员方法

当没有现成的java文件,只拿到一个class文件怎么办呢?

就算你是用java文件去创建对象,底层依旧是需要一个class文件,也就是说想要创建对象,就必须要得到一个class文件,也就是获取该class的文件对象。

class类:

成员变量:Fields

构造方法:Constructor

成员方法:Method

1、怎么获取到class文件对象呢?

1)通过Object中的getClass()方法获取,返回该Object的运行时类

2)通过类名获取静态属性class

3)Class类中获取静态方法

public static 类 forName(String className) 返回与给定字符串名称的类或接口相关联的类对象。

方式一:通过Object中的getClass()方法获取,返回该Object的运行时类

方式二:通过类名获取静态属性class Person.class

方式三:Class类中静态方法(开发中最常用方式)

public static 类 forName(String className) 返回与给定字符串名称的类或者接口相关联的类对象。

注意:这里需要写该类在本项目中的完整路径。

通过反射获取class文件对象来创建该类的对象

获取class文件中的构造方法

public Constructor[] getConstructors() 返回一个包含Constructor对象的数组。

反映由此Constructor对象表示的类的所有公共类函数。(不包括获取私有的,默认的修饰构造方法)

public Constructor[] getDeclaredConstructors() 返回反映Constructor对象表示的类声明的所有Constructor对象的数组类 。

获取所有的构造方法,包括私有,该方法,打破了原先私有构造方法不能创建对象的隔阂

获取单个的构造方法

public Constructor getConstructor(Class... parameterTypes)

返回一个Constructor对象,该对象反映Constructor对象表示的类的指定的公共类函数。

public Constructor getDeclaredConstructor(类... parameterTypes)

返回一个Constructor对象,该对象反映Constructor对象表示的类或接口的指定类函数

获取构造方法的目的是创建对象

public T newInstance(Object... initargs)

对象表示的构造函数,使用指定的初始化参数创建和初始化构造函数的声明类的新实例。

在通过使用获取到私有的构造方法创建对象的时候,报错了,非法访问异常

java.lang.IllegalAccessException

暴力访问

declaredConstructor.setAccessible(true);

Object o1 = declaredConstructor.newInstance("小花");

经过测试发现,只有访问私有的才会出现该异常

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值