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

[java]网络编程

java.net.*包下提供了网络编程的解决方案

通信架构

CS架构

客户端

客户端需要开发

用户需要安装

服务端

需要开发

BS架构

浏览器

不需要开发

需要安装浏览器

服务器

需要开发

网络通信三要素

IP地址

是设备在网络中的唯一标识, 全称 互联网协议地址

分类

公网IP 可以连接互联网的IP地址

内网IP 只能在组织或机构内部使用的地址

192.168. 开头的就是常见的局域网地址

范围在 192.168.0.0 -- 192.168.255.255

特殊IP

172.0.0.1 localhost 代表本机IP

命令

ipconfig //查看本机IP地址

ping IP地址 // 检查网络是否连通

IP域名

IP域名是IP地址的名字. 方便记忆

用IP域名访问网络时,

会首先去本机的dns服务器解析域名, 拿到IP地址,通过IP地址访问资源

形式

IPV4

4个字节组成一个IP地址, 一般用十进制的形式表示

大约能够标记40亿台设备

IPV6

共128位, 号称可以为每粒沙子编号

分成8段表示, 每段每4位编码成一个十六进制位表示, 数之间用冒号分开

InetAddress

代表IP地址

端口

应用程序在设备中的唯一标识

分类

周知端口: 0-1023, 被预先定义的知名应用占用(HTTP占用80, FTP占用21)

注册端口: 1024-49151, 分配给用户进程或应用

动态端口: 4952-65535, 一般不固定分配给某进程, 而是动态分配

我们开发的程序一般选择注册端口, 一个设备中不能出现端口一样的程序, 否则报错

协议

网络链接和数据传输的规则

OSI网络参考模型: 全球网络互联标准

TCI/IP网络模型: 实际的国际标准

UDP用户数据报协议

特点: 无连接,不可靠通信

优势: 通信效率高, 语音通话/视频直播

原理: 不事先建立连接, 数据按照包发送, 只管发出,其他不管

TCP传输控制协议

特点: 面向连接, 可靠通信

优势: 通信效率较低, 网页/文件下载/支付

原理:

三次握手建立连接

目的: 确认双方的收发都没有问题

客户端向服务端发起连接请求, 服务端确定客户端发送无问题

服务端给客户端返回响应, 客户端确定服务端收发无问题

客户端向服务端发送确定信息, 建立连接,服务端确定客户端接受无问题

传输数据进行确认,

数据传输会进行确定, 以保证数据传输的可靠性

四次挥手断开连接,

目的: 确认双方数据的收发都已经完成

客户端向服务端发送断开请求, 请求断开

服务端先返回等待的响应消息, 等待

服务端确认无误后再返回可以断开的消息, 可以断开

客户端发送确认断开的消息, 确认断开

UDP通信

java提供了java.net.DatagramSocket类实现UDP通信

创建客户端/服务端

创建数据包

单发单收

客户端

创建客户端对象

创建数据包对象, 封装要发送的数据

使用客户端对象的方法发送数据

释放资源 close()

服务端

创建服务端对象

创建数据包对象, 封装要接收数据

使用服务端对象的方法接收数据

释放资源 close()

多收多发

使用死循环改造程序

配置程序多开

TCP通信

java提供了一个java,net.Socket类来实现TCP通信

客户端

客户端程序就是通过java.net包下的Scoket类实现的

服务端

服务端就是通过java.net包下的ServerSocket类来实现的

单发单收

客户端

创建客户端的Scoket对象, 请求与服务端的连接

使用Scoket对象的方法获取字节输出流

使用字节输出流完成数据的发送

释放资源, 关闭scoket管道

服务端

创建ServerSocket对象, 注册服务端端口

调用ServerSocket对象的方法,等待客户端的连接,并获得Socket管道对象

通过Socket对象的方法得到字节输入流, 完成数据的接受

释放资源,关闭socket管道

多发多收

通过循环多发多收

同时接收多个客户端

主线程负责接受客户端连接

客户端连接后, 新建子线程, 处理消息数据

综合案例

即时通信-群聊

模式

客户端->服务端通信

客户端->客户端通信

简易的BS架构

HTTP协议: 规定了响应给浏览器的数据格式

每个连接一个客户端都新建一个线程池不好的,

可以使用线程池技术进行优化


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

相关文章:

  • 大模型UI:Gradio全解11——Chatbot:融合大模型的聊天机器人(4)
  • uniApp开通uniPush1.0个推,SpringBoot集成uniPush1.0个推
  • 二进制/源码编译安装mysql 8.0
  • Linux提权-02 sudo提权
  • 【深入解析】 RNN 算法:原理、应用与实现
  • 爬虫第二篇
  • 使用vitejs搭配vue.js,快速构建简单的网站案例展示Demo
  • Java基础夯实——2.6 Java中锁
  • STM32-笔记3-驱动蜂鸣器
  • 警告 torch.nn.utils.weight_norm is deprecate 的参考解决方法
  • Scala 的迭代器
  • 基于遗传优化SVM支持向量机的数据分类算法matlab仿真,SVM通过编程实现,不使用工具箱
  • VMware Workstation Pro 17 与 虚拟机 ——【安装操作】
  • NoSQL数据库介绍与分类
  • 引言和相关工作的区别
  • AOP实现操作日志记录+SQL优化器升级
  • NFT市场回暖:蓝筹项目成为复苏主力,空投潮助推价格上涨
  • Android 13 Aosp SystemServer功能裁剪(PackageManager.hasSystemFeature())
  • Jenkins搭建并与Harbor集成上传镜像
  • 如何查看K8S集群中service和pod定义的网段范围
  • 备战美赛!2025美赛数学建模C题模拟预测!用于大家练手模拟!
  • Python之公共操作篇
  • AirSim 无人机不同视角采集不同场景的图片
  • SEO短视频矩阵系统源码开发概述
  • 域名历史是什么?怎么进行域名历史查询?
  • gorm源码解析(四):事务,预编译