1,什么是反射:
反射是指在程序运行时动态地获取一个类方法、属性、父类、接口等,并且可以在运行时调用对象的方法或者改变对象的属性值。
2,反射机制相关类
-
Class:表示一个类或接口,获取类信息的方法
-
Method:表示类的方法,获取方法信息的方法
-
Field:表示类的成员变量,获取变量信息的方法
-
Constructor:获取构造方法信息的方法
3,反射的步骤
-
获取 Class 对象
-
类名.class
-
对象.getClass()
-
Class.forName("类的完全限定名")
-
-
获取getField(),getConstructor(),getMethod()
4,网络编程三要素
-
IP地址
是网络中设备的唯一标识
-
IPv4:点分十进制法
-
IPv6:采用128bit地址长度,每16个字节一组,分成8组十六进制数
-
端口
设备上应用程序的唯一标识
取值范围是0 - 65535
-
协议
TCP协议和UDP协议
5,基于UDP的方式进行网络传输
-
无连接的,不可靠的数据库传输
-
数据不安全,缺乏校验
-
效率高
-
发送:音乐、视频、大文件数据使用UDP
6,UDP通信的步骤
-
发送方
-
创建DatagramSocket
-
创建DatagramPacket(数据,长度,目标主机地址,目标主机端口号)
-
调用socket对象的send(数据报对象)
-
关闭
public static void main(String[] args) throws IOException {
Scanner scanner=new Scanner(System.in);
DatagramSocket ds=new DatagramSocket();
while (true){
System.out.println("请输入内容:");
String msg= scanner.next();
byte[] date=msg.getBytes();
DatagramPacket dp=new DatagramPacket(date, date.length,new InetSocketAddress("localhost",10088));
ds.send(dp);
if ("bye".equals(msg)){
System.out.println("结束了");
break;
}
}
ds.close();
}
-
接收方
-
创建DatagramSocket(端口),指定监听的端口
-
创建DatagramPacket(当作容器的字节数组,长度)
-
调用socket对象的receive(数据报对象)
-
显示数据....
-
关闭
public static void main(String[] args) throws IOException {
DatagramSocket ds=new DatagramSocket(10088);
while (true){
byte[] tmp=new byte[1024];
DatagramPacket dp=new DatagramPacket(tmp, tmp.length);
ds.receive(dp);
String str=new String(dp.getData(),0, dp.getLength());
System.out.println(str);
if (str.equals("bye")){
System.out.println("over");
break;
}
}
ds.close();
}
7,基于TCP的方式进行网络传输
-
面向连接,可靠的数据传输
-
数据安全,有校验
-
速度慢
-
对数据要求比较高的传输使用TCP
8,TCP通信的步骤
-
客户端:
-
创建Socket(目标主机地址,端口号)
-
封装socket的输出字节流得到缓冲字节流
-
使用缓冲字节流写入数据
-
清空缓存
-
关闭socket
public static void main(String[] args) throws IOException {
Scanner scanner=new Scanner(System.in);
Socket socket=new Socket("192.168.0.128",12306);
PrintWriter pw=null;
while (true){
System.out.println("输入一句话");
String msg=scanner.next();
pw=new PrintWriter(socket.getOutputStream());
pw.println(msg);
pw.flush();
if ("bye".equals(msg)){
System.out.println("结束了");
break;
}
System.out.println("客户端发送成功");
}
pw.close();
socket.close();
}
-
服务端:
-
创建ServerSocket(监听的端口)
-
使用serverSocket.accept()得到一个Socket对象
-
封装socket的输入字节流得到缓冲字节流
-
读取数据
-
关闭socket
public static void main(String[] args) throws IOException {
ServerSocket serverSocket=new ServerSocket(12316);
//阻塞式接受
Socket socket=serverSocket.accept();
//数据在socket的输入流 ,将字节流转成带缓冲区的字符流
BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String msg=null;
while (true){
msg=br.readLine();
System.out.println("服务端收到:"+socket.getInetAddress()+"消息"+msg);
if ("bye".equals(msg)){
System.out.println("结束了");
break;
}
}
br.close();
serverSocket.close();
socket.close();
}