今天任务
常规:05–06 (必会)
难点:07–10 (练习)
(无重点)
问题:
1.TCP,UDP的区别和联系(必会)
2.网络分层模型(了解)
3.三次握手和四次挥手(扩展)
4.基于TCP,UDP的编写流程(熟练掌握)
技术对比
网页编程:关注上层应用
网络编程:关注底层数据的传输
节点表示每一台网络设备,ip表示节点
Ip地址:定位网络中的节点…(电脑,手机…)
192.168.20.26
192.168 局域网内部的开头
20网关
26ip地址
端口号:区分软件
URL:统一资源定位符(互联网中资源的指针)
传输层协议:(标准,合同,规范)
UDP:邮寄包裹|写信 缺点:不安全,大小限制(一般不超过60k) 优点:协议简单,开销小,效率高
TCP:打电话 缺点:效率低 优点:基于连接,安全,没有大小限制 (重点)
IP:定位网络中的节点…(电脑,手机…)
Ipv4 4个字节32位 Ipv6 128位
特殊的IP:
192.168.0.0~192.168.255.255 非注册IP(局域网内使用的IP),专门供组织内部使用的IP
127.0.0.0 本地IP
localhost:本地(也叫域名) www.baidu.com也是域名
IP与域名:
DNS解析器:做域名与IP直接解析问题
java.net包(常用类)
InetAddress:
InetSocketAddress:
URL
端口:区分软件
2个字节 0~65535表示端口号
同一协议下端口号不能冲突
8000以内为预留端口号,建议自己设置端口号为8000以上
InetSocketAddress :此类实现IP套接字地址(IP地址+端口号)
常见的端口号:
80:http
8080:tomcat
3306:mysql
1521:oracle
URL:统一资源定位符,互联网中资源的指针
互联网的三大基石:http, html, url
url组成:
协议:http
域名:www.baidu.com
端口:80
资源:index.html?username=zhangsan&password=1234#a (3a—>锚点 url.getRef())
http://www.baidu.com:80/index.html/index.html?username=zhangsan&password=1234#a
Socket:套接字
传输层为应用层开辟的一个小口子
面向Socket编程,不同的传输层协议对Socket的实现不同
UDP协议实现:
两端平等: 发送端 接收端
UDP协议下数据传输基于字节数组
DatagramSocket
DatagramPacket
DatagramSocket
DatagramSocket(int port) 构造一个数据报套接字并将其绑定到本地主机上的指定端口。
void receive(DatagramPacket p)从此套接字接收数据报包。
void send (DatagramPacket p)从此套接字发送数据报包。
DatagramPacket: 该类表示数据报包。
UDP协议下基本流程:发送端
1.定义我是发送端
2.准备数据
3.打包
4.发送
5.关闭
UDP协议下基本流程:接收端
1.定义我是接收端
2.准备包裹,用来接收数据
3.接收数据
4.处理数据
5.关闭
TCP: 基于连接的,类似打电话,安全,效率低,没有大小限制
基于3次握手建立连接,几次挥手断开连接
协议下两端是不平等的,客户端, 服务器端
tcp协议下数据传输基于IO流
TCP协议下实现基本流程:客户端
1.定义我是客户端 Socket该类实现客户端套接字(也称为“套接字”),套接字是两台机器之间通信的端点。
2.准备数据
3.获取输出流(字节为单位),向服务器发送数据
4.刷出
5.关闭
TCP协议下实现基本流程:服务器端
1.定义我是服务器 ServerSocke该类实现服务器套接字
2.阻塞式监听 Scoket accept() 侦听对此套接字的连接并接受它
3.获取输入流,读取客户端发送的数据
4.处理数据
校验用户输入的登录信息是否正确(admin 1234)
1)校验方式
2)校验方式
5.关闭
TCP协议下实现单向登录流程:客户端
1.定义我是客户端
2.键盘输入接收用户输入的登录信息 username=zhangsan&password=123
3.获取输出流,向服务器发送数据
4.刷出
5.关闭
TCP协议下实现单向登录流程:服务器端
1.定义我是服务器端
2.阻塞式监听
3.获取输入流,读取客户端发送的数据
4.处理数据
校验用户输入的登录信息是否正确(admin 1234)
5.关闭
TCP协议下实现双向登录流程:客户端
1.定义我是客户端
2.键盘输入接收用户输入的登录信息 usernamezhangsan&password=123
3.获取输出流,向服务器发送数据
4.刷出
5.获取输入流,读取服务器响应的结果
6.处理结果
7.关闭
TCP协议下实现双向登录流程:服务器端
1.定义我是服务器
2.阻塞式监听
3.获取输入流,读取客户端发送的数据
4.处理数据
校验用户输入的登录信息是否正确(admin 1234)
5.获取输出流,将结果响应给客户端
6.刷出
7.关闭
TCP协议下实现多用户登录流程:服务器端
服务器端能够实现对多个客户端做响应
重复执行某段代码可以使用循环,但是多个客户端只能排队登录
TCP协议下实现多用户登录流程:服务器端
利用多线程实现,监听到一个客户端就开启一个线程提供服务
回顾:
写出字节数组,可以调用outputstream为我们写出字节数组的方法,
我想用字节流,但是想直接读取字符串,通过转换流转成字符串;字节流的功能流,可以直接读写基本数据类型的类型加数据包含String类型,Data流 Object流
新增功能 write int ;write boolean