当前位置: 首页 > 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;原来…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...