目录
前言:学习JAVA的第二十一天(基础)-CSDN博客
网络编程
在网络通信协议下,不同计算机上运行的程序,进行的数据传输。
三要素:
IP地址:设备在网络中的地址,是唯一的标识。
端口号 :应用程序在设备中唯一的标识。
协议:数据在网络中传输的规则,常见的协议有UDP、TCP、http、 https、 ftp。
IP
全称: Internet Protocol,是互联网协议地址,也称IP地址。是分配给上网设备的数字标签。
常见IP的分类:
IPv4:全称: Internet Protocol version 4,互联网通信协议第四版。采用32位地址长度,分成4组
IPv6:全称: Internet Protocol version 6,互联网通信协议第六版。采用128位地址长度,分成8组
IPv4的地址分类形式:
公网地址(万维网使用)和私有地址(局域网使用)。
192.168.开头的就是私有地址,范围即为192.168.0.0--192.168.255.255特殊IP地址:
127.0.0.1,也就是localhost:是回送地址也称本地回环地址,也称本机IP。
查看电脑IP方法:
win+R 输入 cmd 命令中输入ipconfig
InetAddress类
java中表示ip的类
测试类:
public static void main(String[] args) throws UnknownHostException {
//获取InetAddress对象
InetAddress address = InetAddress.getByName("192.168.87.1");
System.out.println(address);///192.168.87.1
//获取主机名
System.out.println(address.getHostName());//LAPTOP-MNVDV52U
//获取ip地址
System.out.println(address.getHostAddress());//192.168.87.1
}
端口号
应用设备在设备中唯一的标识(由两个字节表示的整数)
一个端口只能被一个应用软件使用
协议
计算机网络中,连接和通信的规则被称为网络通信协议
UDP协议
- 用户数据报协议(User Datagram Protocol)
- UDP是面向无连接通信协议。
- 速度快,有大小限制一次最多 发送64K,数据不安全,易丢失数据
发送数据测试类:
public static void main(String[] args) throws IOException {
//发送数据 创建DatagramSocket对象
DatagramSocket ds = new DatagramSocket();
//打包数据
String str = "何时复西归";
byte[] bytes = str.getBytes();
InetAddress address = InetAddress.getByName("127.0.0.1");
int port = 12345;
DatagramPacket dp =new DatagramPacket(bytes,bytes.length,address,port);
//发送数据
ds.send(dp);
//释放资源
ds.close();
}
接受数据测试类:
public static void main(String[] args) throws IOException {
//发送数据 创建DatagramSocket对象
DatagramSocket ds = new DatagramSocket();
//打包数据
String str = "何时复西归";
byte[] bytes = str.getBytes();
InetAddress address = InetAddress.getByName("127.0.0.1");
int port = 12345;
DatagramPacket dp =new DatagramPacket(bytes,bytes.length,address,port);
//发送数据
ds.send(dp);
//释放资源
ds.close();
}
UDP的三种通信方式
- 单播
- 组播
- 广播
TCP协议
- 传输控制协议TCP(Transmission Control Protocol)
- TCP协议是面向连接的通信协议。
- 速度慢,没有大小限制,数据安全。
TCP通信程序
TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象
通信之前要保证连接已经建立
通过Socket产生IO流来进行网络通信
发送数据测试类
public static void main(String[] args) throws IOException {
//TCP协议->发送数据
//创建Socket对象
Socket socket = new Socket("127.0.0.1",12345);
//获取输出流
OutputStream os = socket.getOutputStream();
//写出数据
os.write("久违了".getBytes());
//释放资源
os.close();
socket.close();
}
接收数据测试类
public static void main(String[] args) throws IOException {
//TCP协议->接收数据
ServerSocket ss = new ServerSocket(12345);
//监听客户端的链接
Socket socket = ss.accept();
//获取输入流
InputStream is = socket.getInputStream();
//防止乱码问题
InputStreamReader isr = new InputStreamReader(is);
int b;
while((b = isr.read()) != -1){
System.out.print((char) b);
}
//释放资源
socket.close();
ss.close();
}
反射
反射允许对封装类的字段,方法和构造函数的信息进行编程访问。
获取class对象的三种方式:
①Class.forName("全类名");
②类名.class
③对象. getClass();
获取构造方法:
方法名 | 说明 |
---|---|
ConstructoK?>[] getConstructors() | 返回所有公共构造方法对象的数组 |
Constructor<?>[] getDeclaredConstructors() | 返回所有构造方法对象的数组 |
Constructor<T> getConstructor(Class<?>... parameterTypes) | 返回单个公共构造方法对象 |
Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) | 返回单个构造方法对象 |
获取成员变量:
方法名 | 说明 |
---|---|
Field[] getFields() | 返回所有公共成员变量对象的数组 |
Field[] getDeclaredFields() | 返回所有成员变量对象的数组 |
Field getField(String name) | 返回单个公共成员变量对象 |
Field getDeclaredField(String name) | 返回单个成员变量对象 |
获取成员方法:
方法名 | 说明 |
---|---|
Method[] getMethods() | 返回所有公共成员方法对象的数组,包括继承的 |
Method[] getDeclaredMethods() | 返回所有成员方法对象的数组,不包括继承的 |
Method getMethod(String name, Clas<?>... parameterTypes) | 返回单个公共成员方法对象 |
Method getDeclaredMethod(String name, Class<?>... parameterTypes) | 返回单个成员方法对象 |
动态代理
在程序的执行过程中,使用jdk的反射机制,创建代理对象,并动态的指定代理的目标类
特点:
无侵入式的给代码增加额外的功能