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

4000字浅谈Java网络编程

什么是网络编程?

  • 可以让设备中的程序与网络上的其他设备中的程序进行数据交互的技术(实现网络通信)。

基本的通信架构

  • 基本的通信架构有两种形式:CS架构(Client客户端/Server服务端)、BS架构(Browser浏览器/Service服务端)

1-网络编程三要素

1.1-IP

  • IP(Internet Protocol)全称“互联网协议地址”,是分配给上网设备的唯一标识。
  • 目前,被广泛采用的IP地址有两种:IPv4、IPv6

IPv4

  • IPv4是Internet Protocol version 4的缩写,它使用32位地址,通常以点分十进制表示。

IPv6

  • IPv6是Internet Protocol version 6的缩写,它使用128位地址,号称可以为地球上的每一粒沙子编号。
  • IPv6分成8段,每段每四位编码成一个十六进制位表示,每段之间用冒号(:)分开,将这种方式称为冒分十六进制

IP域名(Domain Name)

  • 用于在互联网上识别和定位网站的人类可读的名称

例如

www.baidu.com

www.xunshan777.cn

DNS域名解析(Domain Name System)

  • 是互联网中用于将域名转换为对应IP地址的分布式命名系统。它充当了互联网的“电话薄”,将便于记忆的域名映射到数字化的IP地址,使得用户可以通过域名来访问网站和其他网络资源。

公网IP、内网IP、本机IP

  • 公网IP:是可以连接到互联网的IP地址
  • 内网IP:也叫局域网IP,是只能组织机构内部使用的IP地址;例如192.168.开头的就是常见的局域网地址,范围为192.168.0.0--192.168.255.255,专门为组织机构内部使用。
  • 本机IP:127.0.0.1、localhost:代表本机IP,只会寻找当前程序所在的本机。

IP常用命令

  • ipconfig:查看本机IP地址
  • ping IP地址:检查网络是否连通。

InetAddress

代表IP地址。

1.1.1-InetAdress的常用方法

InetAddress

代表IP地址。

public static void main(String[] args) {//目标:认识InetAddress类获取本机IP对象和对方ID对象。try {//1.获取本机IP对象InetAddress ip1=InetAddress.getLocalHost();System.out.println(ip1);System.out.println(ip1.getHostName());System.out.println(ip1.getHostAddress());//2.获取对方ID对象InetAddress ip2=InetAddress.getByName("www.baidu.com");System.out.println(ip2);System.out.println(ip2.getHostName());System.out.println(ip2.getHostAddress());//3.判断本机与对方主机是否互通boolean reachable = ip2.isReachable(3000);//判断在3000毫秒内是否可以ping通System.out.println(reachable);} catch (Exception e) {e.printStackTrace();}}

1.2-端口

  • 作用:用来标记正在计算机设备上运行的应用程序,被规定为一个16位的二进制,范围是0~65535。

端口分类

  • 周知端口:0~1023,被预先定义的知名应用占用(如:HTTP占用80,FTP占用21)。
  • 注册端口:1024~49151,分配给用户进程或某些应用程序。
  • 动态端口:49152~65535,之所以称为动态端口,是因为它一般不固定分配某种进程,而是动态分配。
  • 注意:我们自己开发的程序一般选用注册端口,且一个设备中不能出现两个程序的端口号一样,否则报错。

1.3-协议

什么是通信协议?

  • 网络上通信的设备,事先规定的连接,以及传输数据的规则被称为网络通信协议。

为了让全球所有上网设备都能互通互联,需要指定一套统一的标准

开放式网络互联标准:OSI网络参考模型

  • OSI网络参考模型:全球网络互联标准
  • TCP/IP网络模型:事实上的国际标准

传输层的两个协议

  • UDP:用户数据报协议。
  • TCP:传输控制协议。

UDP协议

  • 特点:无连接、不可靠通信。
  • 不事先建立连接,数据按照包发,一包数据包含:自己的IP、端口、目的地IP、端口和数据(限制在64KB内)等。
  • 发送方不管对方是否在线,数据在中间丢失也不管,如果接受方受到数据也不返回确认,故是不可靠的。(一般常用于视频直播这种,因为这种丢一些也没关系。)

TCP协议

  • 特点:面向连接、可靠通信。
  • TCP的最终目的:要保证在不可靠的信道上实现可靠的数据传输。
  • TCP主要有三个步骤实现可靠传输:三次握手建立连接、传输数据进行确认,四次挥手断开连接。

三次握手建立可靠连接

  • 可靠连接:确保通信双方收发消息都是没问题的(全双工模式)

四次挥手断开连接

  • 目的:确保通信双方收发消息都已经完毕。

2-UDP通信

2.1-UDP快速入门

UDP协议

  • 特点:无连接、不可靠通信。
  • 不事先建立连接,数据按照包发,一包数据包含:自己的IP、端口、目的地IP、端口和数据(限制在64KB内)等。
  • 发送方不管对方是否在线,数据在中间丢失也不管,如果接受方受到数据也不返回确认,故是不可靠的。(一般常用于视频直播这种,因为这种丢一些也没关系。)
  • Java提供了一个Java.net.DatagramSocket类来实现UDP通信。

2.2-UDP协议的多发多收

客户端实现

  1. 创建DatagramSocket对象(发送端对象)
  2. 使用while死循环不断的接收用户的数据输入,如果用户输入的exit则退出程序
  3. 如果用户输入的不是exit, 把数据封装成DatagramPacket
  4. 使用DatagramSocket对象的send方法将数据包对象进行发送
  5. 释放资源

服务端实现

  1. 创建DatagramSocket对象并指定端口(接收端对象)→接韭菜的人
  2. 创建DatagramPacket对象接收数据(数据包对象)→韭菜盘子
  3. 使用DatagramSocket对象的receive方法传入DatagramPacket对象
  4. 使用while死循环不断的进行第3步

3-TCP通信

3.1-TCP快速入门

TCP协议

  • 特点:面向连接、可靠通信。
  • TCP的最终目的:要保证在不可靠的信道上实现可靠的数据传输。
  • TCP主要有三个步骤实现可靠传输:三次握手建立连接、传输数据进行确认,四次挥手断开连接。
  • Java提供了一个java.net.Socket类来实现TCP通信。

3.1.1-TCP通信的实现一发一收:客户端开发

  • 客户端程序就是通过java.net包下的Socket类来实现的。

public static void main(String[] args) throws Exception{//目标:实现TCP通信下一发一收:客户端开发。//1.创建Socket对象,请求与服务端的Socket连接。 可靠连接
Socket socket=new Socket(InetAddress.getLocalHost(),9999);//2.从Socket通信管道中得到一个字节输出流。OutputStream os = socket.getOutputStream();//3.特殊数据流DataOutputStream dos = new DataOutputStream(os);dos.writeInt(1);dos.writeUTF("你好,我是客户端");//4.释放资源socket.close();
}

3.1.2-TCP通信的实现一发一收:服务端开发

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

public static void main(String[] args) throws Exception{//目标:完成TCP通信一发一收:服务端开发。System.out.println("==服务端启动了==");//1.创建服务端ServerSocket对象(绑定端口号 监听客户端连接)ServerSocket ss = new ServerSocket(9999);//2.调用accept方法,阻塞等待客户端连接,一旦有客户端连接会返回一个Socket对象,代表和客户端通信的通道Socket socket = ss.accept();//3.获取输入流,读取客户端发送的数据InputStream is = socket.getInputStream();//4.把字节输入流包装成特殊数据输入流DataInputStream dis = new DataInputStream(is);//5.读取数据int id = dis.readInt();String msg = dis.readUTF();System.out.println("id="+id+",收到的客户端消息msg:"+msg);//6.客户端的ip地址和端口号System.out.println("客户端的ip地址:"+socket.getInetAddress().getHostAddress());System.out.println("客户端的端口号:"+socket.getPort());
}

3.2-TCP的多发多收

  • 客户端使用死循环,让用户不断输入消息
  • 服务端也使用死循环,控制服务端程序接收完消息后,继续去接收下一个消息。

3.3-同时接收多个客户端的消息

目前我们开发的服务端程序,是否可以支持同时与多个客户端通信?

  • 不可以。
  • 因为服务端现在只有一个主线程,只能处理一个客户端的消息。
  • 这个时候我们就要引入多线程。

相关文章:

4000字浅谈Java网络编程

什么是网络编程? 可以让设备中的程序与网络上的其他设备中的程序进行数据交互的技术(实现网络通信)。 基本的通信架构 基本的通信架构有两种形式:CS架构(Client客户端/Server服务端)、BS架构(…...

立体工业相机提升工业自动化中的立体深度感知

深度感知对仓库机器人应用至关重要,尤其是在自主导航、物品拾取与放置、库存管理等方面。 通过将深度感知与各种类型的3D数据(如体积数据、点云、纹理等)相结合,仓库机器人可以在错综复杂环境中实现自主导航,物品检测…...

大模型基础BERT——Transformers的双向编码器表示

大模型基础BERT——Transformers的双向编码器表示 整体概况 BERT:用于语言理解的深度双向Transform的预训练 论文题目:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding Bidirectional Encoder Representations from…...

怎么禁止Ubuntu自动更新升级

怎么禁止Ubuntu自动更新升级 笔者在做MIT 6.S081的时候发现他给我的qemu自动更新了又卡住了,故关闭了自动更新 文章目录 怎么禁止Ubuntu自动更新升级一、图形化修改二、基于命令行修改配置文件的方法 一、图形化修改 1.打开设置->软件和更新->更新 2.选择自…...

【SpringBoot】20 同步调用、异步调用、异步回调

Git仓库 https://gitee.com/Lin_DH/system 介绍 同步调用:指程序在执行时,调用方需要等待函数调用返回结果后,才能继续执行下一步操作,是一种阻塞式调用。 异步调用:指程序在执行时,调用方在调用函数后立…...

【Excel】数据透视表分析方法大全

数据透视表的最常用的功能是分类汇总,其实它还有很强大的数据分析功能。在数据透视表右键菜单的值显示方式中,可以看到有14个很实用的分析选项。 1、总计的百分比 作用:透视表中每一个数字(包括汇总行、总计行)占右…...

深度学习在边缘检测中的应用及代码分析

摘要: 本文深入探讨了深度学习在边缘检测领域的应用。首先介绍了边缘检测的基本概念和传统方法的局限性,然后详细阐述了基于深度学习的边缘检测模型,包括其网络结构、训练方法和优势。文中分析了不同的深度学习架构在边缘检测中的性能表现&am…...

k8s 1.28.2 集群部署 docker registry 接入 MinIO 存储

文章目录 [toc]docker registry 部署生成 htpasswd 文件生成 secret 文件 生成 registry 配置文件创建 service创建 statefulset创建 ingress验证 docker registry docker registry 监控docker registry ui docker registry dockerfile docker registry 配置文件 S3 storage dr…...

常用的生物医药专利查询数据库及网站(很全!)

生物医药专利信息检索是药物研发前期不可或缺的一步,通过对国内外生物医药专利网站信息查询,可详细了解其专利技术,进而有效降低药物研发过程中的风险。 目前主要使用的生物医药专利查询网站分为两大类,一个是免费生物医药专利查询…...

「QT」几何数据类 之 QPolygon 多边形类

✨博客主页何曾参静谧的博客📌文章专栏「QT」QT5程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…...

写给初学者的React Native 全栈开发实战班

React Native 全栈开发实战班 亲爱的同学们: 很高兴在这里与大家相聚!我是你们的讲师,将带领大家一起踏上 React Native 移动开发的学习之旅。 为什么选择 React Native? 在这个移动互联网时代,App 开发工程师已经…...

工作和学习遇到的技术问题

写在前面 记录工作和学习遇到的技术问题,以求再次遇到可以快速解决。 1:Ubuntu TSL换源报错:Err:1 http://mirrors.aliyun.com/ubuntu focal InRelease 执行如下操作(已经操作的则忽略),首先在文件/etc/apt/sources…...

如何解决JAVA程序通过obloader并发导数导致系统夯住的问题 | OceanBase 运维实践

案例背景 某保险机构客户的数据中台,自系统上线后不久,会定期的用 obload 工具从上游业务系统导入数据至OceanBase数据库。但,不久便遇到了应用服务器的 Memory 与 CPU 资源占用持续攀升,最终导致系统夯住而不可用的异常。 memo…...

Git零基础到入门

一、开始工作区 clone: 克隆一个仓库到新的目录。 git clone https://github.com/username/repository.git init: 创建一个新的空 Git 仓库或重新初始化现有的仓库,新建git项目。 //创建项目两种方式 //一、本地项目自己创建项目,先创建好工作文件夹,通…...

HTTP 1.0、HTTP 1.1 和 HTTP 2.0 区别

HTTP 1.0、HTTP 1.1 和 HTTP 2.0 是超文本传输协议(HTTP)不同版本的规范,各自进行了多项更新和改进: 1. HTTP/1.0 单一请求-响应:每次请求都需要建立一个新的 TCP 连接,完成后立即断开。无状态连接&#…...

解决 ElSelect 数据量大导致加载速度慢

遇到一个性能相关的问题&#xff0c;使用 Element Plus 的 <ElSelect> 组件在数据量很大时&#xff0c;加载速度变慢。 下面简单分析下原因&#xff0c;并提供了一些解决方法。 1. 问题分析 1、大量 DOM 节点渲染 问题&#xff1a;当数据量非常大时&#xff0c;每一个…...

在 CentOS 系统中,您可以使用多种工具来查看网络速度和流量

在 CentOS 系统中&#xff0c;您可以使用多种工具来查看网络速度和流量 在 CentOS 系统中&#xff0c;您可以使用多种工具来查看网络速度和流量1. 使用 iftop安装 iftop使用 iftop 2. 使用 nload安装 nload使用 nload 3. 使用 vnstat安装 vnstat初始化 vnstat查看流量 4. 使用 …...

分布式----Ceph部署

目录 一、存储基础 1.1 单机存储设备 1.2 单机存储的问题 1.3 商业存储解决方案 1.4 分布式存储&#xff08;软件定义的存储 SDS&#xff09; 1.5 分布式存储的类型 二、Ceph 简介 三、Ceph 优势 四、Ceph 架构 五、Ceph 核心组件 #Pool中数据保存方式支持两种类型&…...

使用 PyTorch 实现 AlexNet 进行 MNIST 图像分类

AlexNet 是一种经典的深度学习模型&#xff0c;它在 2012 年的 ImageNet 图像分类比赛中大放异彩&#xff0c;彻底改变了计算机视觉领域的格局。AlexNet 的核心创新包括使用深度卷积神经网络&#xff08;CNN&#xff09;来处理图像&#xff0c;并采用了多个先进的技术如 ReLU 激…...

Python爬虫项目 | 一、网易云音乐热歌榜歌曲

文章目录 1.文章概要1.1 实现方法1.2 实现代码1.3 最终效果 2.具体讲解2.1 使用的Python库2.2 代码说明2.2.1 创建目录保存文件2.2.2 爬取网易云音乐热歌榜单歌曲 2.3 过程展示 3 总结 1.文章概要 学习Python爬虫知识&#xff0c;实现简单的一个小案例&#xff0c;网易云音乐热…...

赶考状元AI学伴的优势是什么:不止于解题,更在于育人

在当今教育数字化战略行动深入推进的背景下&#xff0c;AI与教育的融合已成为发展新质生产力的重要实践。从国家层面看&#xff0c;教育数字化转型正引领着建设教育强国的方向&#xff0c;而AI教育应用也从课程试点逐步走向普及。在这一宏大趋势中&#xff0c;赶考状元AI学伴脱…...

nli-distilroberta-base保姆级教学:从镜像拉取→端口映射→API测试全流程

nli-distilroberta-base保姆级教学&#xff1a;从镜像拉取→端口映射→API测试全流程 1. 项目概述 nli-distilroberta-base是一个基于DistilRoBERTa模型的自然语言推理(NLI)Web服务&#xff0c;专门用于判断两个句子之间的逻辑关系。这个轻量级模型能够快速准确地分析句子对&…...

vSphere环境安全指南:使用vCenter创建受限用户的最佳实践

vSphere环境安全指南&#xff1a;精细化权限管理实战 在虚拟化基础设施管理中&#xff0c;vSphere环境的安全性直接关系到企业核心业务的稳定运行。作为高级管理员&#xff0c;我们常常面临一个两难选择&#xff1a;既要确保团队成员能够高效完成工作&#xff0c;又要防止过度授…...

取水泵站远程监控物联网系统方案

某取水泵站具备河流/水库双水源取水设计&#xff0c;配置调节池实现水量缓冲&#xff0c;同时包括取水泵、电动蝶阀、潜污泵、送/排风机、原水水质检测仪等设备&#xff0c;实现对泵站设备工况的全面监控与智能控制&#xff0c;保障各个子水厂的供水安全与稳定。通过将现场PLC控…...

Debian/Ubuntu 上 KVM 虚拟化环境搭建全攻略:从源码到实战

Debian/Ubuntu 上 KVM 虚拟化环境搭建全攻略&#xff1a;从源码到实战 在当今云计算和容器化技术蓬勃发展的时代&#xff0c;虚拟化技术依然是基础设施领域不可或缺的基石。KVM&#xff08;Kernel-based Virtual Machine&#xff09;作为Linux内核原生支持的虚拟化解决方案&…...

如何用Mojo实现高效A/B测试:算法效果评估与迭代优化完整指南

如何用Mojo实现高效A/B测试&#xff1a;算法效果评估与迭代优化完整指南 【免费下载链接】mojo Mojo编程语言 项目地址: https://gitcode.com/GitHub_Trending/mo/mojo Mojo编程语言为开发者提供了强大的性能和灵活性&#xff0c;特别适合构建需要高效算法评估的系统。本…...

Ostrakon-VL-8B高算力适配:RTX 4090D显存17GB极限压测与优化记录

Ostrakon-VL-8B高算力适配&#xff1a;RTX 4090D显存17GB极限压测与优化记录 1. 引言&#xff1a;当零售AI遇上顶级显卡 最近在部署一个专门为餐饮零售场景优化的多模态大模型——Ostrakon-VL-8B时&#xff0c;遇到了一个有趣的挑战。这个模型基于Qwen3-VL-8B微调&#xff0c…...

STEP3-VL-10B性能评测:10B参数模型在A100上吞吐量达18.7 token/s实测

STEP3-VL-10B性能评测&#xff1a;10B参数模型在A100上吞吐量达18.7 token/s实测 最近&#xff0c;阶跃星辰开源了一个让我眼前一亮的模型——STEP3-VL-10B。作为一个10B参数级别的多模态视觉语言模型&#xff0c;它的表现确实让人惊喜。我在A100上实测后发现&#xff0c;它的…...

Chatbot、Composer与Agent架构深度解析:如何选择最优对话系统方案

Chatbot、Composer与Agent架构深度解析&#xff1a;如何选择最优对话系统方案 想象一下&#xff0c;你正在为一个电商平台设计智能客服。老板要求&#xff1a;既要能秒回“我的订单到哪了”这种简单问题&#xff0c;又要能处理“帮我推荐几款适合周末露营的装备&#xff0c;预…...

python之with和try

with 和 try 都是 Python 中用于处理“可能会出问题”的场景的关键字&#xff0c;但它们的核心目标和应用方式有所不同。下面这个表格能帮你快速把握它们的核心区别和联系&#xff1a;特性with语句try语句核心目标资源管理&#xff0c;确保资源使用后被正确释放异常处理&#x…...