当前位置: 首页 > article >正文

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


http://www.kler.cn/a/597456.html

相关文章:

  • ffmpeg+ubuntu16.04编译ffmpeg库
  • 自然语言处理(5)—— 中文分词
  • AF3 quat_to_rot函数解读
  • 手机号登录与高并发思考
  • C#实现高性能文件批量处理器(多线程+Hash校验+正则过滤)
  • 时序分析笔记
  • Java多线程与高并发专题——Future 是什么?
  • 【记录】并行运行olmocr把服务器跑崩
  • curl库+openssl库windows编译
  • Web3 环境下用户数据隐私保护的技术方案分析
  • Android Studio 中出现的 org.codehaus.groovy.GroovyBugError 错误版本兼容性修复
  • 【Linux】如何在 Linux 上查找占用空间较大的文件和文件夹
  • Ubuntu 20.04 安装并使用Cursor
  • 能不能解释一下 ,什么是React 的错误边界?
  • 用tensorboard支持pytorch训练可视化
  • 【视频】m3u8相关操作
  • 笔记:代码随想录算法训练营day59:110.字符串接龙 、105.有向图的完全可达性、106.岛屿的周长
  • ubuntu系统/run目录不能执行脚本问题解决
  • LabVIEW发电平台数据采集系统
  • 15:视图