网络编程 ---针对传输层
网络通信的要素
通信双方的地址:
- ip
- 端口号
–>192.168.16.124 :5900
规则: 网络通信的协议 (http ,ftp , smtp , tcp ,udp )
TCP/IP参考模型
IP地址
Java中对应的类 :InetAddress
- 唯一定位一台网络上计算机
- 127.0.0.0.1 :本机localhost
- ip地址的分类:
Ipv4:
127.0.0.1, 由4个字节组成, 地址长度位32位 , 每个字节长度0~255
—>42亿个 30亿在北美,亚洲4亿,2019年用完
IPv6:
2001:0db8:85a3:0000:1319:8a2e:0370:7344
地址长度128位, 由8个无符号整数 :
0~9 + abcde 组成
补充:
位(bit): 数据存储的最小单位,每个二进制数字0或者1就是1个位
一共八组,每组4个数字,一共32个数,如果每个数字都是十六进制数,一个十六进制数可以写成4个二进制数(就是十六进制数转成二进制数)
可以理解为有多少位就是多少个二进制数
所以,32×4=128位
公网(给互联网使用的) -->相当于42亿
私网(局域网) 192.168.xx.xx 一般都是局域网,专门给组织内部使用的
ABCDE类地址 ———>ipv4地址,按范围划分(0~255)
域名:记忆IP www.baidu.com
端口 Port
端口表示计算机上的一个程序进程
- 不同进程由不同的端口号,用户来区分软件
- 被规定范围 0~65535
- 单个协议下,端口号不能冲突
端口分类:
1、 公有端口 : 0~1023 //尽量不要去占用
http:80
https:443
FTP :21
Telent(远程监听窗口) :23 …
2、程序注册端口 : 1024~49151 ,分配用户或程序
Tomcat :8080
MySQL :3306
Oracle : 1521
3、动态/私有端口 :49152~65535 //尽量不要去占用
命令行常中使用
netstat -ano //查看所有端口
netstat -ano|findstr “5900” //查看指定端口
tasklist|findstr “8696” //查看端口指定进程
通信协议
网络通信协议:速率,传输码率,代码结构,传输控制…
问题:非常复杂 —> 解决:分层
TCP/IP协议簇 (实际上是一组协议)
IP:网络互联协议
TCP:用户传输协议 //类似于打电话,先建立连接再传递
UDP:用户数据报协议 //类似于发短信直接发,但对方不一定收到
TCP和UDP对比
TCP :
- 连接,稳定
- 三次握手,四次挥手
最少需要三次,保证连接稳定
A:你瞅啥
B:瞅你咋地
A:淦
最少四次断开
A:我下线了
B:你我知道你要下线了
B:你真的要下线了吗
A:我真的下线了
- 分为客户端和服务端去连接的
- 传输完成 ,释放连接 ,效率低
UDP:
- 不连接,不稳定
- 客户端和服务端没有明确界限
- 不管有没有准备好,都可以发给你 ---->导弹 , DDOS:洪水攻击(饱和攻击)
TCP和UDP的使用
常识补充: .bat --> windows执行 .sh --> linux执行
TCP实现聊天
客户端:
1、连接服务器Socket
2、发送消息
服务器:
1、建立服务器端口 ServerSocket
2、等待用户的连接 accept
3、接收用户消息
TCP文件上传的实现
UDP消息发送
虽然不需要连接,是否接受的到不确定,但必须有"活着的"才能能接受包裹,这是个前提,所要会有对应的发送端和接受端
UDP聊天的实现
补充:阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。
循环发送消息
循环接收消息
UDP多线程在线咨询
双方既可以是发送方也可以是接收方
将代码与线程结合,每一方创建两个线程一个用来发送,一个用来接收
URL下载网络资源
https://www.baidu.com
URL:统一资源定位符,定位互联网上的某一个资源
组成 协议://IP地址:端口(/项目名/资源)
URL下载网络资源
https://www.baidu.com
URL:统一资源定位符,定位互联网上的某一个资源
组成 协议://IP地址:端口(/项目名/资源)