d20(184-190)-勇敢开始Java,咖啡拯救人生
目录
网络通信
网络通信三要素(IP地址,端口号,协议
IP地址
InetAddress
端口号
协议
传输层的两个通信协议
UDP通信
java.net.Datagramsocket类
客户端
服务端
UDP通信多收多发
客户端
服务端
TCP通信
java.net.Socket类
客户端
服务端
TCP通信多收多发
客户端
服务端
群聊
网络通信
网络编程:可以让设备中的程序与网络上其他设备中的程序进行数据交互(实现网络通信的)
基本的通信架构有2种形式:CS架构(Client客户端/Server服务端)、BS架构(Browser浏览器/Server服务端)。


网络通信三要素(IP地址,端口号,协议

IP地址
IP(Internet Protocol):全称”互联网协议地址”,是分配给上网设备的唯一标志。
IP地址有两种形式:IPV4、IPV6



公网IP:是可以连接互联网的IP地址;
内网IP:也叫局域网IP,只能组织机构内部使用。
192.168.开头的就是常见的局域网地址,范围即为192.168.0.0--192.168.255.255,专门为组织机构内部使用
特殊IP地址
127.0.0.1、localhost:代表本机IP,只会寻找当前所在的主机。
IP常用命令
ipconfig:查看本机IP地址。
pingIP地址:检查网络是否连通
InetAddress


端口号
端口:标记正在计算机设备上运行的应用程序的,被规定为一个16 位的二进制,范围是0~65535。
分类
周知端口:0~1023,被预先定义的知名应用占用(如:HTTP占用 80,FTP占用21)
注册端口:1024~49151,分配给用户进程或某些应用程序。
动态端口:49152到65535,之所以称为动态端口,是因为它一般不固定分配某种进程,而是动态分配。
注意:我们自己开发的程序一般选择使用注册端口,且一个设备中不能出现两个程序的端口号一样,否则出错。
协议
通信协议:网络上通信的设备,事先规定的连接规则,以及传输数据的规则被称为网络通信协议

传输层的两个通信协议
UDP(User Datagram Protocol):用户数据报协议;
TCP(Transmission ControlProtocol):传输控制协议。
UDP协议
特点:无连接、不可靠通信;通信效率高
不事先建立连接,数据按照包发,一包数据包含:自己的IP、程序端口,目的地IP、程序端口和数据(限制在64KB内)等。
发送方不管对方是否在线,数据在中间丢失也不管,如果接收方收到数据也不返回确认,故是不可靠的。
TCP协议
特点:面向连接、可靠通信;通信效率相对不高哦
TCP的最终目的:要保证在不可靠的信道上实现可靠的传输,
TCP主要有三个步骤实现可靠传输:三次握手建立连接,传输数据进行确认,四次挥手断开连接
三次握手建立可靠连接
可靠连接:确定通信双方,收发消息都是正常无问题的!(全双工
传输数据会进行确认,以保证数据传输的可靠性

四次握手断开连接 确保双方数据的收发都已经完成
UDP通信
不事先建立连接:发送端每次把要发送的数据(限制在64KB内)、接收端IP、等信息封装成一个数据包,发出去就不管了
java.net.Datagramsocket类

客户端

服务端

可以获取是从哪发来的

记得最后加socket.close(); // 其实一般都不加,服务端永远不死
UDP通信多收多发
客户端

服务端

与多客户端连接,只需要客户端别指定端口号,让它默认分配,然后再启动一个客户端就行
TCP通信
通信双方事先会采用“三次握手”方式建立可靠连接,实现端到端的通信;底层能保证数据成功传给服务端。
java.net.Socket类
客户端


服务端


TCP通信多收多发
客户端

服务端

与多客户端同时通信——多线程




群聊
Client
package cn.ptz;import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;public class Client {public static void main(String[] args) throws Exception {// 创建对象,请求与服务器连接Socket socket = new Socket("127.0.0.1",7777);new ClientReaderThread(socket).start();// 从socket管道得到字节输出流OutputStream os = socket.getOutputStream();// 低级输出流包装成数据输出流DataOutputStream dos = new DataOutputStream(os);Scanner sc = new Scanner(System.in);while (true){System.out.println("请输入");String msg = sc.nextLine();if ("exit".equals(msg)){System.out.println("退出");dos.close();socket.close();break;}dos.writeUTF(msg);dos.flush();}}
}
ClientReaderThread
package cn.ptz;import java.io.DataInputStream;
import java.io.InputStream;
import java.net.Socket;public class ClientReaderThread extends Thread{private Socket socket;public ClientReaderThread(Socket socket){this.socket = socket;}@Overridepublic void run() {try {InputStream is = socket.getInputStream();DataInputStream dis = new DataInputStream(is);while (true){try {String msg = dis.readUTF();System.out.println(msg);}catch (Exception e){System.out.println("客户退出" + socket.getRemoteSocketAddress());Server.onlineSockets.remove(socket);dis.close();socket.close();break;}}}catch (Exception e) {e.printStackTrace();}}
}
Server
package cn.ptz;import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;public class Server {public static List<Socket> onlineSockets = new ArrayList<>();public static void main(String[] args) throws Exception {System.out.println("服务器启动");ServerSocket serverSocket = new ServerSocket(7777);while (true){Socket socket = serverSocket.accept();onlineSockets.add(socket);System.out.println("客户端连接" + socket.getRemoteSocketAddress());new ServerReaderThread(socket).start();}}
}
ServerReaderThread
package cn.ptz;import java.io.*;
import java.net.Socket;public class ServerReaderThread extends Thread{private Socket socket;public ServerReaderThread(Socket socket){this.socket = socket;}@Overridepublic void run() {try {InputStream is = socket.getInputStream();DataInputStream dis = new DataInputStream(is);while (true){try {String msg = dis.readUTF();System.out.println(msg);sendMsgToAll(msg);}catch (Exception e){System.out.println("客户退出" + socket.getRemoteSocketAddress());Server.onlineSockets.remove(socket);dis.close();socket.close();break;}}}catch (Exception e) {e.printStackTrace();}}private void sendMsgToAll(String msg) throws IOException {for (Socket onlineSocket : Server.onlineSockets) {OutputStream os = onlineSocket.getOutputStream();DataOutputStream dos = new DataOutputStream(os);dos.writeUTF(msg);dos.flush();}}
}
BS架构

哈哈记得用线程池 不想学了 滚
相关文章:
d20(184-190)-勇敢开始Java,咖啡拯救人生
目录 网络通信 网络通信三要素(IP地址,端口号,协议 IP地址 InetAddress 端口号 协议 传输层的两个通信协议 UDP通信 java.net.Datagramsocket类 客户端 服务端 UDP通信多收多发 客户端 服务端 TCP通信 java.net.Socket类 客…...
Python 登录表单处理
分析: 处理登录表单以便爬⾍能够抓取需要认证的⽹⻚数据,通常需要模拟登录过程。这可以通过发送带有⽤⼾凭证的POST请求到登录表单的URL来实现。为了保持登录状态,需要处理和保存会话中的 cookies。Python的 requests 库可以⽅便地处理这些任…...
2024.05.27学习记录
1、面经复习: 实际工作经验章节 2、代码随想录刷题:动态规划剩下部分和单调栈 3、rosebush 组件库完成Input 和 AutoComplete部分内容...
BLASTBufferQueue端的GraphicBuffer怎么和SurfaceFlinger端的BufferStateLayer关联上
BLASTBufferQueue端的GraphicBuffer怎么和SurfaceFlinger端的BufferStateLayer关联上 引言 在跟进hwc_layer是如何产生的,并如何被填充上GraphicBuffer的,怎么也找不到被填充的GraphicBuffer的来源,最终找到了,它的来源是客户端的…...
48、spfa求最短路
spfa求最短路 题目描述 给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数。 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出impossible。 数据保证不存在负权回路。 输入格式 第一行包…...
安装PyTorch详细步骤
💥注意事项: CPU版和GPU版选一个进行安装即可 如果有Nvidia显卡,则安装cuda版本的PyTorch,如没有nvidia显卡,则安装cpu版。 目前常见的深度学习框架有很多,最出名的是:PyTorch(faceb…...
linux线程,线程控制与线程相关概念
线程概念 线程这个词或多或少大家都听过,今天我们正式的来谈一下线程; 在我一开始的概念中线程就是进程的一部分,一个进程中有很多个线程,这个想法基本是正确的,但细节部分呢我们需要细细讲解一下; 什么…...
第八大奇迹
目录 题目描述 输入描述 输出描述 输入输出样例 示例 输入 输出 运行限制 原题链接 代码思路 题目描述 在一条 R 河流域,繁衍着一个古老的名族 Z。他们世代沿河而居,也在河边发展出了璀璨的文明。 Z 族在 R 河沿岸修建了很多建筑,…...
MySQL:CRUD初阶(有图有实操)
文章目录 📑1. 数据库的操作🌤️1.1 显示当前的数据库🌤️1.2 创建数据库🌤️1.3 选中数据库🌤️1.4 删除数据库 📑2. 表的操作🌤️2.1 查看表结构🌤️2.2 创建表🌤️2.3…...
『大模型笔记』使用 vLLM 和 PagedAttention 快速提供 LLM 服务!
使用 vLLM 和 PagedAttention 快速提供 LLM 服务! 文章目录 一. 使用 vLLM 和 PagedAttention 快速提供 LLM 服务!1.1. PagedAttention二. 参考文献小红书中文字幕视频:https://www.xiaohongshu.com/explore/66502b60000000000500433e官网文档(推荐,里面有动图解释):vLLM:…...
简述vue-loader是什么?使用它的用途有哪些
vue-loader是一个webpack的加载器(loader),主要用于将Vue组件的单文件(.vue文件)转换为JavaScript模块。使用vue-loader的主要用途包括: 解析.vue文件:vue-loader能够解析.vue文件中的模板、样式和脚本,并将它们分离出来进行处理…...
如何远程访问Redis?
远程访问Redis是一种常见的需求,特别是在分布式系统或跨地域网络中。通过远程访问,我们可以轻松地对远程的Redis数据库进行操作和管理。 天联保障数据安全 对于远程访问Redis的安全性问题,我们可以借助天联来保障数据的安全。天联是一种基于…...
#12松桑前端后花园周刊-SolidStart、Vercel融资、Angular18、Nextjs15RC、p5.js、ChromeDevTools引入AI
⚡️行业动态 SolidStart 1.0 元框架发布 Solidjs 核心团队发布其元框架 SolidStart 1.0 正式版,其特点如下:基于文件系统的路由;支持SSR、流式SSR、CSR、SSG渲染模式;通过代码分割、树摇和无用代码删除构建优化;基于…...
vue3 vite title 页面标题设置
效果图: 1. 安装 vite-plugin-html 插件 npm install vite-plugin-html -D2. 修改 vite.config.js import {defineConfig, loadEnv} from vite import { createHtmlPlugin } from "vite-plugin-html" import {resolve} from path import vue from vitej…...
spring boot添加License(软件许可)
文章目录 前言1. 生成钥匙库2. 生成证书3. 生成公匙库4.业务代码1. 引入依赖2. 关键代码3. 配置文件 5、改成线上地址,这样不用每次打包,发送license.lic文件给客户,重启项目就行5.1、工具类5.2 修改部分: 总结 前言 工作需要给软…...
LangChain打造一个AI客服
最近在学习LangChain,langchain的第一个入门应用就是和ChatGPT结合形成的一个AI客服,本期文章就带大家一起认识下 LangChain LangChain是现在用得最多的AI框架,langchain在帮助如基于文档数据的回答、聊天机器人和代理这类的应用程序 langch…...
【前端三剑客之JS】详解JS
1. JS的引入方式 (1). 内部脚本方式引入 在页面上,通过一对script标签引入js代码.script代码放置位置有一定随意性,一般放在head标签中. (2).外部脚本方式引入. 内部脚本只能在当前页面中使用,代码复用度不高.可以将脚本放在单独的js文件…...
重庆耶非凡科技有限公司有选品师项目培训吗?
在当今科技飞速发展的时代,各种科技公司如雨后春笋般涌现,它们在不同领域发挥着重要作用。其中,重庆耶非凡科技有限公司以其独特的业务模式和专业服务,在业界赢得了良好的口碑。那么,重庆耶非凡科技有限公司究竟是做什…...
格式转化——Labelme标注好的json文件批量转为png(标签)文件(物体为红色,背景为黑色)和jpg原图
作用如题目,批量将标注好的json文件转成png标签,jpg原图,其中标签时红黑图。 代码如下: import argparse import base64 import json import os import os.path as osp import imgviz import PIL.Image import yaml from labelm…...
力扣刷题--2535. 数组元素和与数字和的绝对差【简单】
题目描述 给你一个正整数数组 nums 。 元素和 是 nums 中的所有元素相加求和。 数字和 是 nums 中每一个元素的每一数位(重复数位需多次求和)相加求和。 返回 元素和 与 数字和 的绝对差。 注意:两个整数 x 和 y 的绝对差定义为 |x - y| 。…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...
android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...
