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

通信网络-Socket、Java中的网络支持、多线程服务器

前言

通信网络-Socket、Java中的网络支持、多线程服务器
场景:使用java网络创建一个聊天室
博客地址:芒果橙的个人博客

文章目录

    • 前言
    • 通信网络-Socket
      • TCP/IP
      • TCP/IP 模型
      • 端口
    • Java中的网络支持
      • 概念
      • 1. InetAddress
      • 2. URL
      • 3. Socket
      • 4. Datagram
    • 多线程服务器
      • 应用多线程来实现服务器与多客户端之间的通信

通信网络-Socket

两台计算机进行通信的条件: 有唯一的标识,表示所处的身份和所处的位置:IP地址 有共同的语言:协议 每台主机都有端口号,用来区分哪个应用在通信

TCP/IP

  • TCP/IP是目前世界上应用最为广泛的协议,是以TCP和IP为基础的不同层次上多个协议的集合
  • 也称:TCP/IP协议族、TCP/IP协议栈
  • TCP:Transmission Control Protocol ——传输控制协议
  • IP:Internet Protocol ——互联网协议

TCP/IP 模型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SHIZsudK-1677913533652)(F:\website\Blog\blog\source_drafts\image-20230304093601628.png)]
在这里插入图片描述

端口

  • 用于区分不同应用程序
  • 端口号范围为065535,其中01023为系统所保留
  • IP地址和端口号组成了所谓的Socket,Socket是网络上运行的程序之间双向通信链路的终结点,是TCP和UDP的基础

Java中的网络支持

概念

针对网络通信的不同层次,Java中提供的网络功能有四大类

  1. InetAddress:用于标识网络上的硬件资源
  2. URL:统一资源定位符,通过URL可以直接读取或写入网络上的数据
  3. Sockets:使用TCP协议实现网络通信的Socket相关的类
  4. Datagram:使用UDP协议,将数据保存在数据报中,通过网络进行通信

1. InetAddress

  • 获取本地的InetAddress实例:InetAddress.getLocalHost()

  • 根据机器名获取InetAddress实例:InetAddress.getByName()

    InetAddress inetAddress = InetAddress.getLocalHost();System.out.println("IP地址:" + inetAddress.getHostAddress());System.out.println("计算机名:" + inetAddress.getHostName());InetAddress ia = InetAddress.getByName("NOD4AAITZWEN3FD");System.out.println("IP地址:" + ia.getHostAddress());System.out.println("计算机名:" + ia.getHostName());
    

2. URL

  1. Uniform Resource Locator——统一资源定位符,表示Internet上某一资源的地址
  2. 由两部分组成:协议名称和资源名称,冒号隔开
  • 创建URL实例:new URL()

    URL baidu = new URL("http://www.baidu.com");URL url = new URL(baidu,"/s?wd=什么是url");System.out.println("协议:" + url.getProtocol());  // httpSystem.out.println("主机:" + url.getHost());      // www.baidu.comSystem.out.println("端口:" + url.getPort());      // -1 (未指定端口,则使用默认端口号,返回-1)System.out.println("查询字符串:" + url.getQuery());  // wd=什么是url
    

3. Socket

TCP协议是面向连接、可靠的、有序的,以字节流的方式发送数据

基于TCP协议实现网络通信的类

  • 客户端的Socket类
  • 服务端的ServerSocket类

基于tcp的socket模型

在这里插入图片描述

Socket和ServerSocket连接的实现步骤

  1. 创建ServerSocket和Socket
  2. 打开连接到Socket的输入/输出流
  3. 按照协议对Socket进行读/写操作
  4. 关闭输入输出流、关闭Socket
  • 创建服务端

    // 1.创建服务端ServerSocket server = new ServerSocket(8888);// 2.监听System.out.println("服务器启动中...");Socket socket = server.accept();// 3.获取输入流,读取客户端信息InputStream inputStream = socket.getInputStream();InputStreamReader inputStreamReader = new InputStreamReader(inputStream);BufferedReader bufferedReader = new BufferedReader(inputStreamReader);String info;while ((info = bufferedReader.readLine()) != null) {System.out.println("接收到客户端信息:" + info);}// 4.关闭输入流和资源System.out.println("关闭服务端");socket.close();bufferedReader.close();inputStreamReader.close();inputStream.close();socket.close();server.close();
    
  • 创建客户端

    // 1.创建客户端System.out.println("客户端启动中...");Socket client = new Socket("localhost",8888);// 2.获取输出流,向服务端发送信息OutputStream outputStream = client.getOutputStream();PrintWriter printWriter = new PrintWriter(outputStream);printWriter.write("我是客户端");printWriter.flush();// 3.关闭输出流和资源client.shutdownOutput();printWriter.close();outputStream.close();client.close();
    

4. Datagram

UDP协议——用户数据报协议,是无连接、不可靠、无序的,特点是速度比较快

进行数据传输时,首先将要传输的数据定义成数据报,在数据报中指明数据所要达到的Socket,然后再将数据报发送出去

TCP和UDP区别

TCPUDP
是否连接面向连接面向非连接
传输可靠性可靠不可靠
应用场合传输大量数据少量数据
速度
  • 创建服务端

    // 1.创建服务端System.out.println("服务端启动中...");DatagramSocket server = new DatagramSocket(8888);// 2.定义数据报byte[] bytes = new byte[1024];DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);// 3.接收数据//while (true) {server.receive(datagramPacket);// 4.读取数据String info = new String(datagramPacket.getData(),datagramPacket.getOffset(),datagramPacket.getLength(), StandardCharsets.UTF_8);System.out.println("接收到客户端信息:" + info);// 5.关闭资源server.close();System.out.println("服务端关闭...");//}
    
  • 创建客户端

    // 1. 定义发送数据String message = "我是客户端";byte[] bytes = message.getBytes(StandardCharsets.UTF_8);// 2. 创建数据报,包含发送的信息DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);// 3. 创建SocketSystem.out.println("客户端启动...");DatagramSocket client = new DatagramSocket();// 4. 连接并发送client.connect(new InetSocketAddress("localhost",8888));client.send(datagramPacket);// 5. 关闭资源client.close();
    

多线程服务器

应用多线程来实现服务器与多客户端之间的通信

基本步骤

  1. 服务端创建ServerSocket,循环调用accept()等待客户端连接(死循环)
  2. 客户端创建一个Socket并请求和服务端连接
  3. 服务端接收客户端请求,创建Socket与该客户端建立连接
  4. 建立连接的两个socket在一个单独的线程中对话
  5. 服务端持续等待新的连接

相关文章:

通信网络-Socket、Java中的网络支持、多线程服务器

前言 通信网络-Socket、Java中的网络支持、多线程服务器 场景:使用java网络创建一个聊天室 博客地址:芒果橙的个人博客 文章目录前言通信网络-SocketTCP/IPTCP/IP 模型端口Java中的网络支持概念1. InetAddress2. URL3. Socket4. Datagram多线程服务器应用…...

搞懂 JS this、call、apply、bind

搞懂 JS this、call、apply、bind javascript 的 this ECMAScript 规范中这样写: this 关键字执行为当前执行环境的 ThisBinding。 MDN 上这样写: In most cases, the value of this is determined by how a function is called. 在绝大多数情况下&…...

力扣209长度最小的子数组

209. 长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 示例 1&#xf…...

【mysql是怎样运行的】-InnoDB数据页结构

文章目录1. 数据库的存储结构:页1.1 磁盘与内存交互基本单位:页1.2 页结构概述1.3 页的上层结构2. 页的内部结构2.1 第1部分:文件头部和文件尾部2.1.1 File Header(文件头部)(38字节)2.1.2 File…...

VIM实用指南(10)语法自动补全插件coc.nvim

最近发现了一个新的自动补全插件coc.nvim异步,nodejs后端,配合它自身的lsp支持用起来非常舒服,同样也支持lsp和snippets,强烈推荐,值得一试。 1、使用vimplug安装插件 1.进入coc.nvim 在github的主页https://github.…...

【Vue3 第二十二章】过渡动画

一、基本用法 <Transition> 是一个内置组件&#xff0c;这意味着它在任意别的组件中都可以被使用&#xff0c;无需注册。它可以将进入和离开动画应用到通过默认插槽传递给它的元素或组件上。进入或离开可以由以下的条件之一触发&#xff1a; 由 v-if 所触发的切换由 v-…...

【linux】:进程状态(僵尸进程等)以及环境变量

文章目录 前言一.进程状态 进程的优先级二.环境变量总结前言 本篇文章是接着上一篇【linux】:进程概念的后续&#xff0c;对于有基础的同学可以直接看这篇文章&#xff0c;对于初学者来说强烈建议大家从上一篇的概念开始看起&#xff0c;上一篇主要解释了冯诺依曼体系以及操…...

【C语言——练习题】指针,你真的学会了吗?

✨✨✨✨如果文章对你有帮助记得点赞收藏关注哦&#xff01;&#xff01;✨✨✨✨ 文章目录✨✨✨✨如果文章对你有帮助记得点赞收藏关注哦&#xff01;&#xff01;✨✨✨✨一维数组练习题&#xff1a;字符数组练习题&#xff1a;字符指针练习题&#xff1a;二维数组练习题&am…...

Linux用户空间与内核空间通信(Netlink通信机制)

一&#xff0c;什么是Netlink通信机制 Netlink是linux提供的用于内核和用户态进程之间的通信方式。但是注意虽然Netlink主要用于用户空间和内核空间的通信&#xff0c;但是也能用于用户空间的两个进程通信。只是进程间通信有其他很多方式&#xff0c;一般不用Netlink。除非需要…...

3.3日报

今天写技术文档 跟需求对其 找负责人要上游数据接口&#xff0c;并处理更新时间问题 遇到的问题&#xff1a; 1.调用上游接口&#xff0c;需要token&#xff0c;而我的数据看板是不需要登录的&#xff0c;需要其他途径获取token 不同数据使用的接口不在一个项目中&#xff…...

并发编程-进程

并发编程-进程 进程创建启动 python提供了multiprocessing模块来支持多进程 multiprocessing.Process(targettask, args(arg,))用于创建进程 Process类相关方法 start() 启动进程join() 等待进程结束 启动子线程 【注意】线程启动代码块要放在__name__ __main__下 方式…...

LeetCode196_196. 删除重复的电子邮箱

LeetCode196_196. 删除重复的电子邮箱 一、描述 SQL架构 Create table If Not Exists Person (Id int, Email varchar(255)) Truncate table Person insert into Person (id, email) values (1, johnexample.com) insert into Person (id, email) values (2, bobexample.com…...

Auto.js Pro 替代品

Time : 2023年3月2日04:20:31 Mode : 持续更新中,排名不分先后.想起啥写啥 By : MemoryErHero NewTime: 2023年3月4日12:11:49 NO13. Autox.js文档&#xff1a; http://doc.autoxjs.com/ NO14. AutoJs6项目文档&#xff1a;https://github.com/SuperMonster003/AutoJs6 NO…...

红日(vulnstack)2 内网渗透ATTCK实战

环境配置 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;wmsi 攻击机&#xff1a;kali2022.03 web 192.168.111.80 10.10.10.80 自定义网卡8&#xff0c;自定义网卡18 PC 192.168.111.201 10.10.10.201 自定义网卡8&#xff0c;自定义网卡18 DC 192.168.52.1…...

一个好的工程项目管理软件所包含的主要功能

工程项目管理软件哪个好&#xff1f;借助Zoho Projects强大的工程项目管理软件&#xff0c;您的团队可以在预算范围内按时交付。从质量保证到预算规划&#xff0c;Zoho Projects的工程项目管理平台旨在推动切实的成果是Zoho Projects工程项目管理软件的优势。 高质量的可交付成…...

【大数据监控】Grafana、Spark、HDFS、YARN、Hbase指标性能监控安装部署详细文档

目录Grafana简介下载软件包安装部署修改配置文件创建用户创建Systemd服务启动 GrafanaSpark应用监控 Graphite_exporterHDFS 监控YARN 监控HBase 监控Grafana 简介 Grafana 是一款开源的数据可视化工具&#xff0c;使用 Grafana 可以非常轻松的将数据转成图表(如下图)的展现形…...

面试题---CSS

面试题---CSS子绝父相下&#xff0c;子百分比的问题两栏布局问题三栏布局问题---圣杯问题(三栏&#xff0c;左右固定&#xff0c;中间自适应)。内联样式与块级样式的区别怎么让一个 div 水平垂直居中分析比较 display: none 、visibility: hidden、opacity: 0优劣和适用场景css…...

【C++】vector

目录 vector 1. vector的成员函数 1.1 构造、析构和赋值运算符重载 1.1.1 构造函数 1.1.2 析构函数 1.1.3 赋值运算符重载 1.2 迭代器 1.3 容量 1.4 元素访问 1.4.1 遍历方法 1.5 修改器 1.6 配置器 2. vector的非成员函数 vector 1. vector的成员函数 1.1 构造…...

RocketMQ安装

RocketMQ安装 安装前准备 1.RocketMQ是使用Java语言编写的所以在安装该MQ前需要Java环境。 2.准备好RocketMQ ​ RocketMQ运行版本下载地址&#xff1a; https://www.apache.org/dyn/closer.cgi?pathrocketmq/4.7.1/rocketmq-all-4.7.1-bin-release.zip ​ RocketMQ源码版…...

Spring——什么是IOC?

一、原则高内聚、低耦合二、什么是IOC&#xff1f;控制反转&#xff0c;把对象创建和对象之间的调用过程&#xff0c;交给spring进行管理三、使用IOC的目的是什么&#xff1f;降低耦合&#xff08;谁和谁的耦合&#xff1f;&#xff1f;如何降低的&#xff1f;&#xff09;原来…...

怕 AI 短剧平台抽成?自研 AI 短剧创作系统贴牌合作,全部收益自留

入局 AI 短剧&#xff0c;最头疼就是被平台高额抽成、规则限制、数据锁死。流量自己做、内容自己产&#xff0c;收益却要分走大半&#xff0c;随时还面临限流封号。选源头自研系统贴牌合作&#xff0c;彻底摆脱平台捆绑&#xff0c;所有收益全额自留&#xff0c;干货分点讲透&a…...

基于YOLOV8的车辆检测系统:快速上手与实用功能

基于YOLOV8的车辆检测系统 基于深度学习的车辆检测系统有数据集 模型已经训练好 直接用即可 报告 30r 就是售价 包搭配环境 远程运行跑通程序 本项目已经训练好模型&#xff0c;配置好环境可直接使用&#xff0c;运行效果见图像&#xff08;可找我要演示视频&#xff09; 项…...

如何快速掌握notepad--:国产跨平台文本编辑器的完整指南

如何快速掌握notepad--&#xff1a;国产跨平台文本编辑器的完整指南 【免费下载链接】notepad-- 一个支持windows/linux/mac的文本编辑器&#xff0c;目标是做中国人自己的编辑器&#xff0c;来自中国。 项目地址: https://gitcode.com/GitHub_Trending/no/notepad-- 引…...

苹果为 iOS 18 发布安全补丁,应对 DarkSword 漏洞威胁

苹果为 iOS 18 发布安全补丁&#xff0c;抵御 DarkSword 攻击苹果为仍运行 iOS 18 的 iPhone 发布了安全补丁&#xff0c;旨在保护这些设备免受危险的 DarkSword 漏洞攻击。据谷歌以及安全公司 iVerify 和 Lookout 报告&#xff0c;DarkSword 是一种极其恶劣的间谍软件漏洞&…...

多模态实践:OpenClaw+千问3.5-27B分析截图中的图表数据

多模态实践&#xff1a;OpenClaw千问3.5-27B分析截图中的图表数据 1. 为什么需要自动化图表分析 作为一名数据分析师&#xff0c;我每天需要处理大量来自股票、销售报表的截图。传统做法是手动录入数据到Excel&#xff0c;既耗时又容易出错。直到我发现OpenClaw与千问3.5-27B…...

深度解析开源项目:NVIDIA Profile Inspector 完全指南与实战配置方案

深度解析开源项目&#xff1a;NVIDIA Profile Inspector 完全指南与实战配置方案 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector NVIDIA Profile Inspector&#xff08;NPI&#xff09;是一款功能强大的…...

Win11Debloat完整指南:如何一键清理Windows系统,提升51%性能的免费神器

Win11Debloat完整指南&#xff1a;如何一键清理Windows系统&#xff0c;提升51%性能的免费神器 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other …...

如何用Python解析LRMX文件:干部管理系统开发实战(附完整代码)

Python解析LRMX文件实战&#xff1a;构建高效干部管理系统 在组织人事管理领域&#xff0c;LRMX文件作为标准数据交换格式&#xff0c;承载着干部任免审批的核心信息。本文将深入探讨如何利用Python技术栈实现LRMX文件的自动化处理&#xff0c;构建一个功能完整的干部管理系统。…...

2025版等级保护测评报告模板:风险导向与合规深化的实践指南

1. 2025版等级保护测评报告模板的核心变革 如果你最近接触过等级保护测评工作&#xff0c;一定会注意到2025版报告模板带来的显著变化。这个版本最大的特点就是从过去的"得分导向"彻底转向了"风险导向"。在实际工作中&#xff0c;我发现很多企业安全负责人…...

Java实战:阿里云OSS文件操作工具类封装与优化

1. 阿里云OSS基础认知与Java集成准备 第一次接触阿里云OSS时&#xff0c;我完全被文档里那些专业术语搞懵了。后来才明白&#xff0c;它本质上就是个超级网盘&#xff0c;只不过比我们平时用的网盘更专业、更稳定。想象一下&#xff0c;你有个无限容量的保险箱&#xff0c;可以…...