Java之网络编程
什么是网络编程?
在网络通信的协议下,不同计算机上运行的程序进行的数据传输
常见的软件架构
cs架构(客户端和服务器)
bs架构(浏览器和服务器)
这两个都是通过访问服务器来显示画面给用户用什么架构取决于业务要求
网络编程三要素(IP 端口 协议)
IP
IPV4的地址分类
可以分为:公网Ip(万维网使用)和私网ip(局域网使用)
192.168.开头的就是私网ip专门为私有企业,组织,机构内部使用来节省Ip地址
特殊IP
127.0.0.1回环地址,也称本机地址,永远只会寻找当前本机的ip
InetAddress类
端口号
应用程序想要往外发送数据必须绑定端口号,一个应用程序只能绑定应该端口号
协议
udp:发送数据的时候,不会检查两台主机是否连接
tcp:发送数据的时候,会检查两台主机是否连接
使用UDP协议发送数据
1:创建对象DatagramSocket(快递公司)
2:打包数据(创建DatagramPacket对象)
3:发送数据
使用TCP协议发送数据
使用UDP协接受数据
1:创建对象DatagramSocket(快递公司)绑定端口号跟发送时要一样
2:接收数据包(创建DatagramPacket对象)
3:解析数据包
4:释放资源
最后我们先运行接收端,在运行发送端
注意:
1:从哪个端口发送无所谓,只要发到的端口和接收的端口一致即可
2:在接收端,运行到receive这个方法时时堵塞的,他要一直等待发送端发送数据
练习一:做一个简单的聊天室
发送端:
接收端:
UDP的三种通信方式:
单播:一对一的发送数据
组播:一个可以给一组电脑发送数据
广播:一个可以给一个局域网内的所有电脑发送数据
组播的代码
发送端:
接收端:
广播的代码把发送端的要发送的Ip地址改成255.255.255.255即可
这样不同的ip地址但是在同一个局域网内的主机也可以接收了
Tcp的通信协议
TCP协议发送数据
TCP协议接收数据
这有一个BUG,就是接收中文的数据会乱码,因为他只能一次接收一个字节的数据
我们可以用高级流,把字节流转换成字符流
三次握手和四次挥手
综合练习一
综合练习二
综合练习三
思路
1:先把本地文件写到内存,在从内存读取到流中
2:在从流中读取文件的数据到内存,在从内存写到本地文件
综合练习四
利用线程+循环来操作
发送端的代码不变
接收端的代码利用线程池+循环来改进
综合练习五
改进综合练习四的代码
这里每次运行都会创建一个线程对象然后在销毁浪费资源,我们可以用线程池来改进
发送端和线性池里面的代码不变,接收端的代码改变
综合练习六
利用bos架构来接收浏览器的信息
这里不需要写客户端了,直接用浏览器来访问
接收端的代码
我们直接用浏览器来访问
我们直接在浏览器输入127.0.0.1:10012(IP地址+端口号)
我这里输入的是回环地址也就是本机的地址,端口号就是我们绑定的10012