一、网络通信
1、网络通信三要素
2、InetAddress方法
3、协议
二、UDP通信
1、客户端发送数据
2、服务端接受数据
3、运行
先启动客户端:
先启动服务端:
不止可以获取数据包,还可以获取客户端ip、端口
4、UDP:也可以多个客户端多发多收
多客户端:
不指定端口,随机获取一个客户端端口
三、TCP通信
1、客户端发送(单发)
2、服务端收(单收)
单收:收完就关闭管道
3、连续多发多收(while true)问题(一个客户端)
4、改进(一个客户端)
5、TCP多发多收(多个客户端)
6、获取上下线的线程
7、群聊
1、定义static 类型的集合,记录在线客户端 (Server)
来了一个客户端想要连接请求,Server就把他加入在线客户端
2、打印服务器端接收到的消息同时,把数据发送到所有在线客户端
如果有客户端退出,管道关闭,则dis.readUTF抛出异常,执行集合的remove方法
3、发送方法
4、创建客户端接收消息类ClientReaderThread(Clent)
在Client类中传递参数socket:通向自己的管道,用来接收服务器端发送的消息
四、BS架构
1、一个请求对应一个线程
2、线程池优化:高并发也不会资源耗尽导致瘫痪
五、单元测试:Junit框架
1、步骤
测试方法:公开、无返回值
2、常用注解
4
作用:
每个测试方法都需要一个独立的通信管道,那么可以把创建socket代码放到中Before中,在After中关闭
测试方法共用同一个通信管道:创建socket代码放到BeforeClass中
六、反射
一、需求引出反射
二、反射机制
三、反射相关类
四、反射优点
五、反射分析
六、Class类常用方法
七、获取Class类对象(主要四种)
八、反射的动态加载
九、类加载三个阶段
十、暴力反射
1、创建实例
2、操作属性
3、操作方法
六、反射
1、获取Class对象
2、获取构造器对象constructor
构造器私有:Declared
3、构造器对象的作用
4、获取成员变量对象
成员变量私有:获取成员变量:Decalared
为成员变量get/set:setAccessiable
get():获取name的值
5、获取类的成员方法
获取私有方法:Declared
触发私有方法:setAccessible
六、反射应用(获取任意对象的字段值)
制作框架:
七、注解
八、元注解:
九、解析注解
1、解析Demo类上的MyTest4注解:c.getDecalredAnnotation()
2、解析test1方法上的MyTest4注解:m.getDeclaredAnnotation()
解析方法,需要先拿到方法对象!!!
3、模拟Junit框架
十、动态代理
导包:reflect反射包下的Proxy类
static类型的方法
返回类型为Star,返回实现Star接口的对象
newIntance返回的是Object,因此强转为Star类型的代理对象
参数一:获取当前类的类加载器
参数二:通过接口数组告诉代理,代理该长什么样子;Star.class: Star类型的接口
代理工具类: