02. 套接字编程基础前提条件:具备基本的网络知识。
2.1 核心概念:从黑盒到代码计算机网络常被简化为线条连接的方框,但在实际编程中,我们需要处理更具体的细节。如果给你一个包含“发送”和“接收”两个方法的 API,你还需要了解什么?
1. TCP 字节流与协议 (The TCP Byte Stream)人们常误以为网络交互就是节点间互相扔“消息包”。但实际上,最常用的 TCP 协议并不生产“消息”,它生产的是**连续的字节流 (Continuous Stream of Bytes)**。
无边界:TCP 字节流内部没有天然的边界。
应用层协议:解释这个字节流是应用层协议的工作。你需要制定规则来切分数据流,将其还原为有意义的消息。
难点:在事件循环(Event Loop)中将字节流正确地拆分为消息,比解析静态文件要复杂得多。
2. 数据序列化 (Data Serialization)网络只认识 0 和 1。
**序列化 (Serialization)**:将高级对象(如字符串、结构体、列表)转换为字节的过程。
**反序列化 (Deserialization)**:将字节还原为对象 ...
03. TCP 服务器与客户端开发指南本章目标:熟悉 Socket API,编写一个基础的 TCP 回显服务器(Echo Server)和客户端。
⚠️ 注意:这里的代码虽然能跑,但仅仅是为了演示 API 的用法。真正的网络编程远不止调用 API 这么简单,完整的错误处理和架构设计将在后续章节展开。
3.1 先决条件 (Prerequisites)1. 熟悉 Linux 环境网络编程的原理通用,但 Windows/macOS 的系统调用细节差异很大。对于初学者,强烈推荐使用 Linux。
环境获取:VirtualBox 虚拟机、WSL (Windows Subsystem for Linux) 或云服务器 (VPS)。
必备技能:
文件操作:编辑、复制、移动、删除。
编译代码:使用 g++。不需要复杂的 Makefile。12g++ -Wall -Wextra -Og -g source.cpp -o program./program
2. 基本编程技能 (C/C++)虽然本项目主要使用 C 语言风格,但会用到少量的 C++ 特性(如 vector, s ...
java
未读从JDK8到JDK17JDK 17 不仅仅是一个普通的版本更新,它标志着 Java 平台的重大转变。作为继 JDK 8 和 JDK 11 之后的又一个长期支持(LTS)版本,JDK 17 集成了自 JDK 9 以来的所有创新特性,是 Java 现代化进程中的重要里程碑。
长期支持版本的意义作为 LTS 版本,JDK 17 将获得至少 8 年的支持期。这意味着企业可以安心地将其应用迁移到 JDK 17 上,享受新特性带来的便利,同时不必担心频繁升级的问题。对于那些仍在使用 JDK 8 的开发者来说,直接跳到 JDK 17 是一个明智的选择。
记录类(Record)传统 JavaBean 的痛点在传统 Java 开发中,创建一个简单的数据类需要编写大量模板代码:
1234567891011121314151617181920212223242526272829// 实体类public class Person { private final String name; private final int age; public Person(String name ...
写在前面:很多小伙伴搞不清楚“代理”、“甚至反向代理”、“内网穿透”这些概念。今天我们不讲枯燥的定义,用几张图和一个“传话筒”的故事,带你轻松看懂!
第一话:谁是“中间人”?(什么是代理)想象一下,你(客户端 Client)是一只住在局域网里的小白兔 🐰。你想去访问远方的城堡(服务器 Server)获取信息。
但是,有时候你不能直接飞到城堡去。可能因为路太远,也可能因为中间有一堵大墙。
这时候,你需要一个帮手——机器人 🤖(代理 Proxy)。它就像一个“传话筒”或者“中间人”。你不直接找城堡,而是把请求告诉机器人,机器人替你去跑腿,拿回东西后再转交给你。
这就叫 “代理”。
第二话:我想出去看看(什么是正向代理)有一天,小白兔🐰在公司里上班。公司的网络管理很严,周围围了一圈高高的红砖墙(防火墙),不让大家随便上外网摸鱼。
这时候,小白兔想去外面的世界(比如 Google 查资料)看看,怎么办?
聪明的网管在墙上开了一个小窗口,并在那里安排了一个特权机器人🤖。
小白兔(Client) 拿着写有网址的信(Request),递给 机器人(Proxy)。
机器人 检查一下信件 ...
麒麟 V10 桌面操作系统启用 Root 用户登录警告:直接使用 Root 用户登录存在安全风险,请谨慎操作。建议仅在必要时启用,并在完成操作后禁用或使用 sudo 命令进行管理。
一、允许使用 Root 用户登录在麒麟 V10 桌面操作系统安装完成后,系统默认会要求创建一个新用户进行登录。由于权限限制,普通用户在某些目录下可能无法进行修改或创建文件,执行一些系统管理命令时也需要频繁使用 sudo 并输入密码,较为繁琐。为了更方便地进行操作,可以直接启用 Root 用户登录。
二、修改 Root 账号密码首次启用 Root 用户登录前,需要先设置 Root 用户的密码。
打开终端: 在桌面上通过鼠标右键菜单,选择【打开终端】弹出命令行界面。
修改 Root 密码: 在终端中执行以下命令:
1sudo passwd root
输入密码:
系统会提示你输入当前用户的登录密码。
然后,你需要输入两次你希望设置的 Root 用户密码。
切换到 Root 用户(可选): 密码修改完成后,你可以在当前的终端中使用以下命令切换到 Root 用户身份,以便进行后续的文件修改:
1su ro ...
Nativefier 打包网页一、环境配置1. 安装 NVM for Windows 管理 nodejs使用nvm 管理node
仓库地址 下载win版直接安装 NVM for Windows 常用命令说明
命令
说明
示例
`nvm arch [32
64]`
显示当前 Node.js 进程的架构 (32 位或 64 位)。可指定 32 或 64 覆盖默认架构。
nvm debug
检查 NVM for Windows 进程是否存在已知问题。
nvm debug
nvm current
显示当前激活的 Node.js 版本。
nvm current
nvm install <version> [arch]
安装指定版本的 Node.js。<version> 可以是版本号、latest 或 lts。[arch] 可选,指定 32 或 64,all 同时安装。--insecure 绕过 SSL。
nvm install 18.0.0, nvm install latest, nvm install lts 64, n ...
v2rayN从入门到精通v2rayN是Windows系统下的代理软件客户端,功能强大且支持多种代理协议,如VMess、VLESS、Trojan、Socks、Shadowsocks、Hysteria2、Tuic等代理协议。
界面预览
主界面
下载官网下载v2rayN官网下载地址:https://github.com/2dust/v2rayN/releases 新手使用建议下载稳定版本,即版本号后标记为 Latest 的版本。
安装教程软件目录下载完成后,找到合适的目录,推荐安装在非系统盘,解压压缩包,解压后的目录如下图所示。
安装目录
找到软件主程序 v2rayN.exe 双击鼠标左键即可开始使用,程序启动后会最小化到任务右小角的托盘,鼠标双击蓝色的 V 字小图标,即可打开软件的主界面。
图标说明不同状态下软件的图标颜色是不一样的,参考下表图标颜色说明。图标状态说明 只适用于 ie系统代理
图标
软件状态
说明
清除系统代理
每次启动/重启服务的时候,强制把windows系统(ie)的代理清除掉。
自动配置系统代理
每次启动/重启服务的时候,强制 ...
java
未读SpringAOP 学习笔记AOP: Aspect Oriented Programming 面向切面编程。主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等。 主要的意图是:将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改 变这些行为的时候不影响业务逻辑的代码。
让关注点代码与业务代码分离!关注点,重复代码就叫做关注点;
关注点形成的类,就叫切面(类)!
面向切面编程,就是指 对很多功能都有的重复的代码抽取,再在运行的时候网业务方法上动态植入“切面类代码”。
执行目标对象方法,动态植入切面代码。
可以通过切入点表达式,指定拦截哪些类的哪些方法; 给指定的类在运行的时候植入切面类代码。
AOP底层实现原理动态代理 CGLIB动态代理与JDK动态代理
java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。
而cglib动态代理是利用asm开源包,对代理对象类 ...
SpringBoot常用工具类断言
断言是一个逻辑判断,用于检查不应该发生的情况
Assert 关键字在 JDK1.4 中引入,可通过 JVM 参数-enableassertions开启
SpringBoot 中提供了 Assert 断言工具类,通常用于数据合法性检查
12345678910111213141516171819202122232425// 要求参数 object 必须为非空(Not Null),否则抛出异常,不予放行// 参数 message 参数用于定制异常信息。void notNull(Object object, String message)// 要求参数必须空(Null),否则抛出异常,不予『放行』。// 和 notNull() 方法断言规则相反void isNull(Object object, String message)// 要求参数必须为真(True),否则抛出异常,不予『放行』。void isTrue(boolean expression, String message)// 要求参数(List/Set)必须非空(Not Empty),否则抛出异 ...
OpenWrt养老旁路由从零开始(基于immortalWrt固件)准备工作
软路由、或是旁路由、或是其他能做软路由的盒子(N1、树莓派等)
软路由或是旁路由本身具有网络
涉及到的组件
immortalWrt固件
passwall(immortalWrt固件已经安装)
AdGuardHome
MosDNS
写在前面1.使用 iKuai +openwrt 做旁路由网络拓扑
immortalWrt固件
passwall(immortalWrt固件已经安装)
AdGuardHome
MosDNS
安装组件
immortalWrt固件下载地址 开源项目地址: 点击进入
passwall 项目地址: 点击进入
MosDNS 项目地址: 点击进入
AdGuardHome 项目地址: 点击进入
immortalWrt安装ImmortalWrt 是一个基于 OpenWrt 的开源路由器固件分支,主要面向中国大陆用户。它与原版 OpenWrt 相比,具有以下特点:
优点
稳定性高:提供了更高的稳定性和可靠性,适合长时间稳定运行。
包管理丰富:拥有丰富的软件包管理系统,方便用户安装各种附 ...

