JavaSE进阶 网络编程
2023-10-11 本文已影响0人
扶光_
可以让程序与网络上的其他设备中的程序进行数据交互。
- 常见的基本模式
C/S模式(client server)
需要开发软件,如果你要更新某个功能是需要用户去更新这个软件的,如果用户选择不更新那么就无法实现这个新功能
B/S模式(browser server)
不需要程序员开发,基于浏览器
一,网络通信三要素
1.1ip地址
设备在网络上的地址,是唯一标识
ipv4(32位)
![](https://img.haomeiwen.com/i24559446/c4cdf914c7c834a8.png)
ipv6(128位),号称可以为地球每一个沙子编号
![](https://img.haomeiwen.com/i24559446/bdeef425c954d886.png)
ip地址形式
-
公网地址和私有地址(局域网使用192.168开头)
-
ip常用命令
ipconfig: 查看本机ip地址
ping (ip地址):检查网络是否连通 -
ip地址操作类InetAddress
1.2端口
应用程序在设备中的唯一标识。比如别人给你发信息你要通过端口来判断是微信还是QQ消息
![](https://img.haomeiwen.com/i24559446/953f0b1595b4240b.png)
端口号:16位的2进制 0-65536
端口类型
- 周知端口 0-1023,被预先定义的应用使用如http占用80
- 注册端口:1024-49151 分配给进程或应用程序 tomcat使用8080端口
- 动态端口:49152-65535 不固定分配某种进程,动态分配
1.3协议:、
数据在网络中传输规则,常见udp和tcp协议
通信协议
连接和通信数据的规则被称网络通信协议
TCP协议
特点
- 必须双方先建立连接,它是一种面向连接的可靠数据传输
- 传输前,采用三次握手方式建立连接
- 可进行大数据量的传输
- 连接,发送数据都需要进行确认,且完毕后还需要释放连接,通信效率低
tcp三次握手
主要是客户端和服务器相互确认收发功能是否完好的过程
可以应用于对信息安全较高的常见如文件下载,金融数据通信
UDP协议
- 是一种无连接,不可靠传输的协议
- 将数据源IP、目的地ip和端口封装成数据包,不需要建立连接
- 每个数据包的大小限制在64kb内
- 不管对方是否准备好,接收方收到也不去而
- 可以广播发送,发送数据无需释放资源,开销小,速度快
使用场景,语言通话,视频会话等
二,UDP通信
DatagramPacket 数据包对象 装数据的
DatagramSocket 发送端和接收端对象
DatagramSocket类成员方法send()发送数据包 receive()接收数据包
![](https://img.haomeiwen.com/i24559446/3c554a6eb480e390.png)
多发多收信息
反复接收数据,使用while循环
广播 组播
![](https://img.haomeiwen.com/i24559446/b58927b24ede90f8.png)
- 广播实现方式
使用广播地址255.255.255.255
发送端发送数据包的目的地址写广播地址且指定端口 (255.255.255.255,88880)
本机所在网段的其他主机的程序只要匹配端口成功就可以收到信息了,声明一样的端口 - 组播实现方式
组播地址224.0.0.0-239.255.255.255
发送端数据包地址必须是组播ip
接收端必须绑定发送端组播ip,端口要一致
DatagramSocket的子类MulticastSocket可以在接收端绑定组播ip
TCP通信
tcp是一种面向连接,可靠,安全的传输数据的协议。
可进行大数据传输
![](https://img.haomeiwen.com/i24559446/4e11b36db6a1f47b.png)
基本操作
![](https://img.haomeiwen.com/i24559446/b10460de86e4ad82.png)
因为现在服务端只有一个线程,所以只能与一个客户端进行通信,不能实现同时与多个客户端消息
多发多收,实现可以同时接收多个客户端
类似于弹幕 ,汇总到一个服务端里面
![](https://img.haomeiwen.com/i24559446/3a5d158def360628.png)
![](https://img.haomeiwen.com/i24559446/5b14c8e3493a7afb.png)
利用线程来实现同时接收多个客户端的消息会出现一个问题。那就是如果有1000个用户就需要创建1000个线程,会很浪费性能,所以引入线程池处理多个客户端信息来进行优化
![](https://img.haomeiwen.com/i24559446/546c594bf3ae9dc1.png)
即时通信
是发给每一个个体
就是客户端发给服务器端,服务器端转发到每个管道socket上,用每个管道的输出流在推出去。
![](https://img.haomeiwen.com/i24559446/65b2d0c4aaeb287e.png)
![](https://img.haomeiwen.com/i24559446/15c84509d1e94aeb.png)
![](https://img.haomeiwen.com/i24559446/2b74a57c97a98fd9.png)
B/S实现
浏览器访问服务端,不需要开发客户端
![](https://img.haomeiwen.com/i24559446/4ef87a9aad130f5b.png)
服务器必须给浏览器响应http协议格式的数据,才可以返回对应数据。是基于http协议
![](https://img.haomeiwen.com/i24559446/42877bb1afbb6b6a.png)