IP、端口:
IP: 定义节点 IPV4 : 4个字节 32位 IPV6 : 8个字节 192.168.0.0~192.168.255.255 供组织内部使用的IP 127.0.0.1 本地IP localhost 本地 IP 与 域名: DNS|域名解析器 InetAddress 端口:区分软件 2个字节 0~65535之间的整数表示端口号 8000的端口号为预留端口号 常见的端口号: 80: http 8080: tomcat 3306: mysql 1521: oracle 同一协议下端口号不能冲突 InetSocketAddress : 此类实现IP套接字地址(IP地址+端口号)它也可以是一对(主机名+端口号), URL:统一资源定位符 协议: 合同 规范
统一资源定位符(URL):
URL : 统一资源定位符
互联网的三大基石: http html url
http://www.baidu.com:80/index.html?username=zhangsan&password=123#a
URL 的组成:
协议:http
域名:/www.baidu.com
端口号: 默认80
访问的资源:index.html
请求参数:username=zhangsan&password=123
锚链接..a
URL : 类URL表示统一资源定位符,指向万维网上的“资源”的指针。
public class URLDemo02 {
public static void main(String[] args) throws MalformedURLException {
//URL(String spec) 从 String表示创建 URL对象。
//URL(String protocol, String host, int port, String file) 创建 URL从指定对象 protocol , host , port号和 file 。
URL url = new URL("http://www.baidu.com:80/haha/index.html?username=zhangsan&password=123#a");
System.out.println(url);
System.out.println("协议:"+url.getProtocol());
System.out.println("域名"+url.getHost());
System.out.println("端口"+url.getPort());
System.out.println("访问资源"+url.getFile());
System.out.println("访问资源"+url.getPath());
System.out.println("请求参数"+url.getQuery());
System.out.println("锚点:"+url.getRef());
}
}
运行截图:
协议、套接字:
协议: 传输层协议: UDP TCP UDP : 写信|邮递包裹 非面向连接 不安全 协议简单,开销小效率高 只管写只管发送 一般不超过60k TCP : 打电话 面向连接 安全 协议复杂,效率低 基于3此握手 没有大小限制的 SOCKET 套接字 相当于传输层为应用层开辟小口子 通过套接字进行传输数据 不同协议下Socket实现不同 面向Socket编程 DatagramSocket 定义发送端|接收端 DatagramPacket 打包 UDP 实现基本流程:-->发送端 发送端与接收端两端是平等的,数据基于字节数组传输 1.定义发送端 DatagramSocket(int port) 2.准备数据 3.打包 4.发送 send(DatagramPacket) 5.关闭
public class UDPDemo04 {
public static void main(String[] args) throws IOException {
System.out.println("-----------------发送端------------------");
Scanner sc = new Scanner(System.in);
System.out.println("请输入要发送的内容:");
String s = sc.next();
//1.定义发送端 DatagramSocket(int port)
DatagramSocket send = new DatagramSocket(8888);
//2.准备数据
byte[] arr = s.getBytes();
//3.打包
//DatagramPacket(byte[] buf, int offset, int length, SocketAddress address)
DatagramPacket packet = new DatagramPacket(arr,0,arr.length,new InetSocketAddress("localhost",9999));
//4.发送 send(DatagramPacket)
send.send(packet);
//5.关闭
send.close();
}
}
UDP:
UDP 实现基本流程:-->接收端
1.定义接收端 DatagramSocket(int port)
2.打包准备接收数据
3.接收 receive(DatagramPacket)
4.处理数据
5.关闭
public class UDPDemo05 {
public static void main(String[] args) throws Exception{
System.out.println("-----------------接收端------------------");
OutputStream os = new BufferedOutputStream(new FileOutputStream("D:/001.txt"));
//1.定义接收端 DatagramSocket(int port)
DatagramSocket rec = new DatagramSocket(9999);
//2.打包准备接收数据
byte[] arr = new byte[1024];
//接收数据的包裹
DatagramPacket packet = new DatagramPacket(arr,0,arr.length);
//3.接收 receive(DatagramPacket)
rec.receive(packet);
//4.处理数据
byte[] datas = packet.getData();
int len = packet.getLength();
System.out.println("接收数据个数"+len);
System.out.println("接收数据"+datas.length);
System.out.println(new String(datas,0,len));
//5.关闭
rec.close();
}
}
反射:
反射: JAVA有着一个非常突出的动态相关机制:Reflection。 Java反射机制,可以实现以下功能: ①在运行时判断任意一个对象所属的类; ②在运行时构造任意一个类的对象; ③在运行时判断任意一个类所具有的成员变量和方法; ④在运行时调用任意一个对象的方法; ⑤生成动态代理; 反射的源头: Class对象用来表示任意一个正在运行期间的java类或者接口 Class对象是不需要手动创建,在类加载到内存之后就存在的jvm构建的 Class对象是唯一的,不会变的,不需要手动创建的 Class对象中包含着这个类的所有内容 如果能够获取一个类型的Class对象,就能够做任何事情!!!! 注意: 发生在程序运行期间的行为
如何获取反射的源头: 1.类名.class 2.Class.forName(权限定名) -->推荐 3.对象.getClass()获取构造器 构造器<T> getConstructor(类<?>... parameterTypes) 返回一个 构造器对象,该对象反映此 类对象所表示的类的指定公共构造函数。 构造器<?>[] getConstructors() 返回一个包含 构造器对象的数组, 构造器对象反映了此 类对象所表示的类的所有公共构造函数。 构造器<T> getDeclaredConstructor(类<?>... parameterTypes) 返回一个 构造器对象,该对象反映此 类对象所表示的类或接口的指定构造函数。 构造器<?>[] getDeclaredConstructors() 返回 构造器对象的数组, 构造器对象反映由此 类对象表示的类声明的所有构造函数。 创建对象 1.通过Class类的newInstance调用某一个类型的空构造为对象出现初始化信息创建对象 -->弃用 2.调用构造器类型的newInstance方法,创建对象的时候指定调用当前的 构造器为对象初始化信息