![f278644fa3475499e4713091c6cffc24.png](https://img-blog.csdnimg.cn/img_convert/f278644fa3475499e4713091c6cffc24.png)
0513多线程
死锁
当线程任务中出现了多个同步(多个锁)时,如果同步中嵌套了其他的同步。这时容易引发一种现象:程序出现无限等待,这种现象我们称为死锁
线程通信
生产者消费者模式
模拟街道案例
wait(),notify(),notifyAll()实现线程通信
![068cecd95e85d616dc316e5466ccbaa5.png](https://img-blog.csdnimg.cn/img_convert/068cecd95e85d616dc316e5466ccbaa5.png)
![c6bf2354f7e21c6d4bd88ecc40462f56.png](https://img-blog.csdnimg.cn/img_convert/c6bf2354f7e21c6d4bd88ecc40462f56.png)
![68533cd5b7d5838d6cf46aac71b50509.png](https://img-blog.csdnimg.cn/img_convert/68533cd5b7d5838d6cf46aac71b50509.png)
![fe299a099155a6127655c2d8572b4230.png](https://img-blog.csdnimg.cn/img_convert/fe299a099155a6127655c2d8572b4230.png)
![6588916fca316899b88c1141b67759e5.png](https://img-blog.csdnimg.cn/img_convert/6588916fca316899b88c1141b67759e5.png)
0513网络编程
IP
定义网络上不同节点
IPV4(32位) IPV6(128位)
非注册IP:192.168.0.0~192.168.255.255
特殊IP:127.0.0.1 <==> local host 本机IP
http://java.net类 InetAddress
InetAddress address1=InetAddress.getLocalHost();
System.out.println(address1.getHostAddress());
System.out.println(address1.getHostName());
InetAddress address2=InetAddress.getByName("百度一下,你就知道");
端口
区分软件的
定义端口 2个字节 0~65535
相同的协议下端口不能冲突
端口自定义越大越好,8000以上,8000以内预留端口号
特殊的端口号:
80: http
8080: tomcat
1521: Oracle端口号
3306: mysql端口号
InetSocketAddress
此类实现 IP 套接字地址(IP 地址 + 端口号)
InetSocketAddress i=new InetSocketAddress("127.0.0.1",8888);
System.out.println(i.getAddress().getHostName());
System.out.println(i.getHostName());
System.out.println(i.getPort());
URL
统一资源定位符|器
互联网的三大基石: html http url
协议:http
* 域名:http://www.baidu.com
* 端口:80 默认80
* 资源:index.html?name=zhangsan&age=123#a
* 百度一下,你就知道
URL 代表一个统一资源定位符,它是指向互联网“资源”的指针
URL
URL url=new URL("http://www.baidu.com:80/index.html?name=zhangsan&age=123#a");
String getFile() 获取此 URL 的文件名。
System.out.println(url.getHost());
getQuery() 获取协议
网络爬虫原理
协议
规范 合同
udp
非面向连接的 写信 ,不安全,效率高,协议简单,开销小,大小有限制一般不超过60k
udp如何实现Socket编程:
发送端和接收端是平等的
DatagramSocket 此类表示用来发送和接收数据报包的套接字
DatagramSocket(int port)
DatagramPacket 此类表示数据报包。
udp发送流程
1.创建发送端,指明发送端的端口
2.准备数据,转为字节数组
3.把数据打包 指明接收端的地址和端口号 DatagramPacket
4.发送数据
5.关闭
UDP基本流程:接收端
1.构建接受端,指定接受端端口
2.准备字节数组,用来存储接口收据的
3.把字节数组打包
4.阻塞式接收
5.处理数据
6.关闭
tcp
面向连接的 打电话 ,安全,效率低,开销大 3次握手:1.拨号 2.回访:响应 3.发送数据 ,基于IO穿出数据
tcp基本流程:服务端
1.构建服务端 ServerSocket 指定端口 ServerSocket(int port)
2.阻塞式监听 Socket accept()
3.一个客户端就是一个socket IO操作
4.关闭
tcp基本流程:客户端
1.创建客户端 Socket 指定服务端的ip和端口 Socket(String host, int port)
http://2.io操作
3.关闭
应用层如何与传输层进行沟通?
通过Socket套接字
面向Socket编程,Socket相当于插座,是两层之间沟通的接口,不同协议,Socket的实现不一样