网络编程:
- 如何定位到一台电脑 IP(人的身份证号码)
2)如何区分多个软件 (端口)
3)如何区分一个软件中的多个资源 url
网络编程:底层 数据如何传输,使用哪种协议
网页编程: 上层
IP 端口 url 协议(合同,规范) : tcp(打电话) udp(发短信|写信) -->更规范,更安全,更高效
IP: 定位网络上的节点(电子设备)
IPV4 IPV6共组织内部使用的额非注册IP: 192.168.0.0 ~ 192.168.255.255
127.0.0.1 本机IP
localhost ->本机域名 --> IP --> DNS服务器转换
InetAddress
端口: port
区分软件
2个字节 0~65535
同一个写一下端口号不能冲突
8000以下的端口号不建议使用–>预留端口号
常见的端口号:
80 http
8080 tomcat
3306 mysql
1521 oracle
InetSocketAddress 端口类(ip+端口)
URL : 统一资源定位符
互联网三大基石 : html http url
协议: 域名、端口、资源
http://www.baidu.com:80/index.html?name=zhangsan&pwd=123#a
传输层协议: 合同
UDP: 写信 发短信 非面向连接 不安全 只管写只管发送->效率高 协议简单,开销小 大小有限制一般不超过60k --> 发送端和接受端两端平等 --> 字节数组
TCP: 打电话 面向连接 安全 基于3次握手-> 1)你在么? 2)在呢 ,建立连接 3)传输 --> 客户端 服务器端 -->IO
Socket 套接字
相当于传输层为应用层开辟的一个小口子
不同协议下Socket实现不同
面向Socket编程
DatagramSocket
DatagramPacket
UDP实现基本流程: 发送端
1.定义发送端 DatagramSocket(int port) 指定发送端ip和端口
2.准备数据–> 转为字节数组
3.打包 DatagramPacket(byte[] buf, int offset, int length, SocketAddress address) 构造一个数据报包发送数据包的长度 length抵消 ioffsetto指定主机上的指定端口号。
4.发送数据 send(DatagramPacket p) 从这个套接字发送一个数据报包。
5.关闭
—文件的传输—> 从本地文件中 读取数据–>传输到对方–>接收到数据–>写出指定本地位置
UDP实现基本流程: 接收端
1.构建接收端
2.准备包裹–>用来接收数据
3.接收
4.处理数据
5.关闭
UDP实现基本流程: 发送端
1.定义发送端 DatagramSocket(int port) 指定发送端ip和端口
2.准备数据–> 转为字节数组
3.打包 DatagramPacket(byte[] buf, int offset, int length, SocketAddress address) 构造一个数据报包发送数据包的长度 length抵消 ioffsetto指定主机上的指定端口号。
4.发送数据 send(DatagramPacket p) 从这个套接字发送一个数据报包。
5.关闭
tcp基于IO流操作
TCP 基本流程: 服务端
1.创建服务端 ServerSocket(int port) 创建绑定到特定端口的服务器套接字。 服务端的端口号
2.阻塞式监听
3.获取IO流
4.读入数据
5.操作数据
6.关闭
TCP 基本流程: 客户端
1.创建客户端 Socket(String host, int port) 指定服务端的IP+端口
2.获取IO流
3.写出数据
4.关闭
传输层协议: 合同
UDP: 写信 发短信 非面向连接 不安全 只管写只管发送->效率高 协议简单,开销小 大小有限制一般不超过60k --> 发送端和接受端两端平等 --> 字节数组
TCP: 打电话 面向连接 安全 基于3次握手-> 1)你在么? 2)在呢 ,建立连接 3)传输 --> 客户端 服务器端 -->IO
Socket 套接字
相当于传输层为应用层开辟的一个小口子
不同协议下Socket实现不同
面向Socket编程
线程优先级:
提高线程优先执行的可能
1~10 1最小 10最大 默认是5
setPriority(int newPriority) 改变这个线程的优先级。
static int MAX_PRIORITY 一个线程可以拥有的最高优先级。
static int MIN_PRIORITY 一个线程可以拥有的最低优先级。
static int NORM_PRIORITY 分配给线程的默认优先级。
线程通信 生产者消费者模式
wait() 等待 当一个线程wait,会进入到对象的等待池中,等待被唤醒
让出cpu的资源,让出 对象锁资源
notify() 唤醒随机一个 唤醒对象等待池中的线程,被唤醒的线程会进入到就绪状态,满足使用条件才可以使用
notifyAll() 唤醒全部
必须要使用在一个同步的环境下