构建高效的Java SOCKS5代理:从零开始的网络转发实现

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:Java案例分享专栏
✨特色专栏:国学周更-心性养成之路
🥭本文内容:鸿蒙生态的崛起与开发者机遇
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
文章目录
- 1. 引言
- 2. 系统架构
- 2.1 Server服务器
- 2.2 节点客户端
- 2.3 OKHttp客户端
- 2.4 系统交互示意图
- 3. Server服务器实现
- 3.1 Server服务器的结构
- 3.2 Server服务器的功能
- 3.3 Server服务器的实现细节
- 3.4 处理SOCKS5请求
- 3.5 连接管理
- 3.6 安全性和性能优化
- 4. 节点客户端实现
- 4.1 节点客户端的结构
- 4.2 节点客户端的功能
- 4.3 节点客户端的实现
- 4.4 解析请求
- 4.5 异常处理
- 4.6 性能优化
- 5. OKHttp客户端实现
- 5.1 OKHttp客户端的结构
- 5.2 OKHttp客户端的功能
- 5.3 OKHttp客户端的实现
- 5.4 代码解析
- 5.5 异步请求示例
- 5.6 性能优化
- 5.7 安全性考虑
- 6. 总结
- 6.1 项目概述
- 6.2 技术实现
- 6.3 安全性和性能优化
- 6.4 未来的扩展

1. 引言
在当今互联网时代,网络安全和隐私保护变得愈发重要。SOCKS5代理作为一种灵活且高效的网络协议,能够帮助用户在不同网络环境中安全地访问互联网。它不仅支持多种协议(如TCP和UDP),还能够处理复杂的网络请求,成为了开发者和网络管理员的得力工具。
本篇博文将深入探讨如何使用Java构建一个简单而高效的SOCKS5代理转发器。我们将通过三个主要模块来实现这一目标:Server服务器、节点客户端和OKHttp客户端。
-
Server服务器:作为整个系统的核心,Server服务器负责监听来自节点客户端的连接请求,并处理SOCKS5协议的请求。我们将使用Netty框架来实现高性能的网络通信,确保能够高效地处理并发请求。
-
节点客户端:节点客户端将与Server服务器保持连接,负责接收来自Server的请求,并根据协议将请求转发到目标服务。它将使用Java原生Socket实现,确保轻量级和高效性。
-
OKHttp客户端:作为一个流行的HTTP客户端,OKHttp将用于向Server服务器的SOCKS5端口发送请求。我们将展示如何利用OKHttp的强大功能,轻松地进行HTTP请求。
2. 系统架构
在构建一个SOCKS5代理转发器时,系统架构的设计至关重要。我们的系统主要由三个模块组成:Server服务器、节点客户端和OKHttp客户端。下面将详细阐述每个模块的功能、交互方式以及它们在整个系统中的角色。
2.1 Server服务器
功能:
Server服务器是整个系统的核心,负责处理来自节点客户端的连接请求,并转发SOCKS5协议的请求。它监听两个端口,分别用于不同的功能:
- 端口1:用于节点客户端的连接。节点客户端通过此端口与Server服务器建立持久连接,以便接收和发送数据。
- 端口2:用于处理SOCKS5请求。当OKHttp客户端或其他客户端向此端口发送SOCKS5请求时,Server服务器将解析请求并将其转发到节点客户端。
技术栈:
我们将使用Netty框架来实现Server服务器。Netty是一个高性能的网络通信框架,能够处理大量并发连接,适合构建高效的网络应用。
交互流程:
- Server服务器启动并监听端口1和端口2。
- 节点客户端连接到端口1,建立持久连接。
- 当OKHttp客户端向端口2发送SOCKS5请求时,Server服务器接收请求并解析。
- Server服务器将解析后的请求转发到已连接的节点客户端。
2.2 节点客户端
功能:
节点客户端的主要职责是与Server服务器保持连接,并处理来自Server的请求。它能够识别SOCKS5和HTTP协议的数据,并根据协议将请求转发到目标服务。
技术栈:
节点客户端将使用Java原生Socket实现,确保轻量级和高效性。通过Socket API,节点客户端能够直接与Server服务器进行数据交换。
交互流程:
- 节点客户端启动并连接到Server服务器的端口1。
- 节点客户端监听来自Server的消息。
- 当接收到SOCKS5请求时,节点客户端解析请求并与目标服务建立连接。
- 节点客户端将请求转发到目标服务,并接收响应。
- 最后,节点客户端将响应数据回传给Server服务器。
2.3 OKHttp客户端
功能:
OKHttp客户端用于向Server服务器的端口2发送SOCKS5请求。它能够轻松地构建HTTP请求,并通过SOCKS5代理进行网络访问。
技术栈:
OKHttp是一个高效的HTTP客户端库,支持异步请求和连接池等功能。它将用于构建和发送HTTP请求。
交互流程:
- OKHttp客户端构建一个SOCKS5请求,并将其发送到Server服务器的端口2。
- Server服务器接收请求并将其转发到节点客户端。
- 节点客户端处理请求并与目标服务交互。
- 最后,节点客户端将响应数据回传给Server服务器,Server服务器再将其返回给OKHttp客户端。
2.4 系统交互示意图
+-------------------+ +-------------------+
| OKHttp客户端 | | Server服务器 |
| | | |
| 发送SOCKS5请求 | --------> | 监听端口2 |
| | | |
+-------------------+ +-------------------+||v+-------------------+| 节点客户端 || || 监听端口1 || |+-------------------+
通过以上模块的设计,我们的SOCKS5代理转发器能够高效地处理网络请求。Server服务器作为核心,负责管理连接和请求转发;节点客户端则负责与目标服务的交互;而OKHttp客户端则提供了一个简单的接口来发送请求。这样的架构设计不仅清晰明了,还能有效地支持高并发的网络请求处理。
3. Server服务器实现
在实现Server服务器时,我们需要深入理解其结构、功能和实现细节。Server服务器是整个SOCKS5代理转发器的核心,负责管理与节点客户端的连接以及处理SOCKS5请求。
3.1 Server服务器的结构
Server服务器的实现主要包括以下几个部分:
- 启动和配置:设置Netty的EventLoopGroup、ServerBootstrap和ChannelInitializer,以便监听指定的端口并处理连接请求。
- 连接管理:管理与节点客户端的连接,包括建立、维护和关闭连接。
- 请求处理:接收SOCKS5请求,解析请求内容,并将其转发到相应的节点客户端。
- 异常处理:处理网络异常和错误,确保服务器的稳定性和可靠性。
3.2 Server服务器的功能
- 监听端口:Server服务器需要监听两个端口,一个用于节点客户端的连接,另一个用于处理SOCKS5请求。
- 处理连接:当节点客户端连接到Server服务器时,服务器需要保持该连接,并能够在后续的请求中使用。
- 转发请求:当接收到SOCKS5请求时,Server服务器需要将请求转发到与节点客户端的连接上,并等待响应。
- 返回响应:将节点客户端的响应数据返回给发起请求的客户端。
3.3 Server服务器的实现细节
以下是Server服务器的实现代码示例,包含了详细的注释以帮助理解。
// Server.java
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.*;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;public class Server {private final int port1; // 监听节点客户端连接的端口private final int port2; // 处理SOCKS5请求的端口public Server(int port1, int port2) {this.port1 = port1;this.port2 = port2;}public void start() throws InterruptedException {// 创建两个事件循环组,一个用于处理连接,一个用于处理IO操作EventLoopGroup bossGroup = new NioEventLoopGroup();EventLoopGroup workerGroup = new NioEventLoopGroup();try {// 创建ServerBootstrap实例ServerBootstrap b = new ServerBootstrap();b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class).childHandler(new ChannelInitializer<SocketChannel>() {@Overrideprotected void initChannel(SocketChannel ch) {// 添加自定义的处理器ch.pipeline().addLast(new Socks5ServerHandler());}});// 绑定端口并启动服务器ChannelFuture f1 = b.bind(port2).sync();System.out.println("Server started on port: " + port2);f1.channel().closeFuture().sync();} finally {// 优雅关闭事件循环组workerGroup.shutdownGracefully();bossGroup.shutdownGracefully();}}public static void main(String[] args) throws InterruptedException {new Server(8081, 1080).start(); // 启动服务器,监听端口8081和1080}
}
3.4 处理SOCKS5请求
在Server服务器中,处理SOCKS5请求的逻辑通常放在一个自定义的处理器中。以下是一个简单的SOCKS5请求处理器示例:
// Socks5ServerHandler.java
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;public class Socks5ServerHandler extends ChannelInboundHandlerAdapter {@Overridepublic void channelRead(ChannelHandlerContext ctx, Object msg) {// 处理SOCKS5请求// TODO: 解析SOCKS5请求并转发到节点客户端// 这里可以添加解析SOCKS5请求的逻辑}@Overridepublic void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {cause.printStackTrace();ctx.close(); // 发生异常时关闭连接}
}
3.5 连接管理
在Server服务器中,连接管理是一个重要的功能。我们需要确保与节点客户端的连接能够保持活跃,并能够处理多种请求。可以使用一个集合来存储当前活跃的连接,以便在需要时进行管理。
import io.netty.channel.Channel;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;public class Server {private final Set<Channel> activeChannels = ConcurrentHashMap.newKeySet();// 在节点客户端连接时添加到集合public void addChannel(Channel channel) {activeChannels.add(channel);}// 在节点客户端断开连接时从集合中移除public void removeChannel(Channel channel) {activeChannels.remove(channel);}
}
3.6 安全性和性能优化
在实现Server服务器时,还需要考虑安全性和性能优化:
- 身份验证:可以在SOCKS5请求处理中添加身份验证逻辑,确保只有授权用户才能使用代理服务。
- 连接池:为了提高性能,可以实现连接池机制,复用与目标服务的连接,减少连接建立的开销。
- 日志记录:记录请求和响应的日志,以便于后续的监控和调试。
Server服务器是SOCKS5代理转发器的核心组件,负责管理连接和处理请求。通过使用Netty框架,我们能够高效地实现网络通信,并确保系统的稳定性和可靠性。
4. 节点客户端实现
节点客户端是SOCKS5代理转发器的重要组成部分,负责与Server服务器保持连接,并处理来自Server的请求。它的主要功能是解析SOCKS5和HTTP协议的数据,并将请求转发到目标服务。以下将详细阐述节点客户端的实现,包括其结构、功能、代码示例以及相关的补充知识。
4.1 节点客户端的结构
节点客户端的实现主要包括以下几个部分:
- 连接管理:与Server服务器建立和维护连接。
- 请求处理:接收来自Server的请求,解析请求内容,并根据协议将请求转发到目标服务。
- 响应处理:接收目标服务的响应,并将其返回给Server服务器。
- 异常处理:处理网络异常和错误,确保客户端的稳定性和可靠性。
4.2 节点客户端的功能
- 建立连接:节点客户端启动后,首先与Server服务器的端口1建立连接。
- 监听消息:节点客户端需要持续监听来自Server的消息,以便及时处理请求。
- 解析请求:当接收到SOCKS5或HTTP请求时,节点客户端需要解析请求内容。
- 转发请求:根据解析的请求内容,节点客户端与目标服务建立连接,并将请求转发。
- 返回响应:将目标服务的响应数据回传给Server服务器。
4.3 节点客户端的实现
以下是节点客户端的实现代码示例,包含详细注释以帮助理解。
// NodeClient.java
import java.io.*;
import java.net.Socket;public class NodeClient {private final String serverAddress; // Server服务器地址private final int serverPort; // Server服务器端口public NodeClient(String serverAddress, int serverPort) {this.serverAddress = serverAddress;this.serverPort = serverPort;}public void start() throws IOException {try (Socket socket = new Socket(serverAddress, serverPort);InputStream input = socket.getInputStream();OutputStream output = socket.getOutputStream()) {// 持续监听Server服务器的消息while (true) {// 读取来自Server的请求byte[] buffer = new byte[4096];int bytesRead = input.read(buffer);if (bytesRead == -1) {break; // 连接关闭}// 处理SOCKS5或HTTP协议数据handleRequest(buffer, bytesRead, output);}}}private void handleRequest(byte[] buffer, int bytesRead, OutputStream output) throws IOException {// TODO: 解析SOCKS5请求或HTTP请求// 这里可以添加解析请求的逻辑// 示例:假设我们解析到目标地址和端口String targetAddress = "example.com"; // 目标地址int targetPort = 80; // 目标端口// 与目标服务建立连接try (Socket targetSocket = new Socket(targetAddress, targetPort);InputStream targetInput = targetSocket.getInputStream();OutputStream targetOutput = targetSocket.getOutputStream()) {// 将请求转发到目标服务targetOutput.write(buffer, 0, bytesRead);targetOutput.flush();// 接收目标服务的响应byte[] responseBuffer = new byte[4096];int responseBytesRead;while ((responseBytesRead = targetInput.read(responseBuffer)) != -1) {// 将响应数据返回给Server服务器output.write(responseBuffer, 0, responseBytesRead);output.flush();}}}public static void main(String[] args) throws IOException {new NodeClient("localhost", 8081).start(); // 启动节点客户端,连接到Server服务器}
}
4.4 解析请求
在节点客户端中,解析请求是一个关键步骤。对于SOCKS5请求,解析过程通常包括以下几个步骤:
- 读取请求头:根据SOCKS5协议,读取请求的头部信息,包括版本、命令、目标地址和目标端口。
- 处理不同的命令:SOCKS5协议支持多种命令,如CONNECT、BIND和UDP ASSOCIATE。根据命令类型,执行相应的操作。
- 建立与目标服务的连接:根据解析到的目标地址和端口,与目标服务建立连接。
以下是一个简单的SOCKS5请求解析示例:
private void handleRequest(byte[] buffer, int bytesRead, OutputStream output) throws IOException {// 解析SOCKS5请求if (buffer[0] != 0x05) {throw new IOException("Invalid SOCKS version");}// 读取目标地址和端口int command = buffer[1]; // 命令String targetAddress = ""; // 目标地址int targetPort = ((buffer[bytesRead - 2] & 0xFF) << 8) | (buffer[bytesRead - 1] & 0xFF); // 目标端口// TODO: 解析目标地址(IPv4或域名)// 处理CONNECT命令if (command == 0x01) {// 与目标服务建立连接// ...}
}
4.5 异常处理
在节点客户端中,异常处理同样重要。我们需要确保在发生网络异常时,能够优雅地关闭连接并进行必要的清理。可以使用try-catch语句捕获异常,并在finally块中关闭连接。
try {// 处理请求的逻辑
} catch (IOException e) {e.printStackTrace(); // 打印异常信息
} finally {// 关闭连接
}
4.6 性能优化
在实现节点客户端时,可以考虑以下性能优化策略:
- 连接复用:如果可能,复用与目标服务的连接,减少连接建立的开销。
- 缓冲区管理:合理管理输入输出缓冲区的大小,以提高数据传输效率。
- 异步处理:使用异步IO或多线程处理请求,以提高并发处理能力。
节点客户端是SOCKS5代理转发器的重要组成部分,负责与Server服务器的交互和请求的转发。通过合理的结构设计和实现,节点客户端能够高效地处理网络请求。
5. OKHttp客户端实现
OKHttp客户端是SOCKS5代理转发器的一个重要组成部分,负责向Server服务器的SOCKS5端口发送请求。通过使用OKHttp库,我们可以轻松地构建和发送HTTP请求,并通过SOCKS5代理进行网络访问。以下将详细阐述OKHttp客户端的实现,包括其结构、功能、代码示例以及相关的补充知识。
5.1 OKHttp客户端的结构
OKHttp客户端的实现主要包括以下几个部分:
- 配置代理:设置SOCKS5代理的地址和端口,以便通过代理发送请求。
- 构建请求:使用OKHttp构建HTTP请求,包括请求方法、URL、请求头等。
- 发送请求:通过OKHttp发送请求,并处理响应。
- 异常处理:处理网络异常和错误,确保客户端的稳定性和可靠性。
5.2 OKHttp客户端的功能
- 配置代理:在创建OKHttpClient实例时,配置SOCKS5代理的地址和端口。
- 构建请求:使用OKHttp的Builder模式构建HTTP请求。
- 发送请求:通过OKHttp的异步或同步方式发送请求,并接收响应。
- 处理响应:解析响应数据并进行相应的处理。
5.3 OKHttp客户端的实现
以下是OKHttp客户端的实现代码示例,包含详细注释以帮助理解。
// OkHttpClientExample.java
import okhttp3.*;import java.io.IOException;public class OkHttpClientExample {public static void main(String[] args) {// 配置SOCKS5代理String proxyHost = "localhost"; // SOCKS5代理地址int proxyPort = 1080; // SOCKS5代理端口// 创建OkHttpClient实例并配置代理OkHttpClient client = new OkHttpClient.Builder().proxy(new java.net.Proxy(java.net.Proxy.Type.SOCKS, new java.net.InetSocketAddress(proxyHost, proxyPort))).build();// 构建HTTP请求Request request = new Request.Builder().url("http://example.com") // 替换为目标URL.build();// 发送请求并处理响应try (Response response = client.newCall(request).execute()) {if (response.isSuccessful()) {// 打印响应体System.out.println(response.body().string());} else {System.out.println("Request failed: " + response.code());}} catch (IOException e) {e.printStackTrace(); // 打印异常信息}}
}
5.4 代码解析
-
配置SOCKS5代理:
- 在创建
OkHttpClient实例时,使用Builder模式配置SOCKS5代理的地址和端口。 - 通过
java.net.Proxy类指定代理类型为SOCKS,并提供代理的地址和端口。
- 在创建
-
构建HTTP请求:
- 使用
Request.Builder构建HTTP请求,指定目标URL。 - 可以根据需要添加请求头、请求体等信息。
- 使用
-
发送请求:
- 使用
client.newCall(request).execute()方法发送请求,并获取响应。 - 这里使用的是同步请求,如果希望使用异步请求,可以使用
enqueue方法。
- 使用
-
处理响应:
- 检查响应是否成功,通过
response.isSuccessful()判断。 - 如果成功,打印响应体内容;如果失败,打印错误代码。
- 检查响应是否成功,通过
5.5 异步请求示例
如果希望使用异步方式发送请求,可以使用enqueue方法。以下是异步请求的示例代码:
client.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {e.printStackTrace(); // 打印异常信息}@Overridepublic void onResponse(Call call, Response response) throws IOException {if (response.isSuccessful()) {// 打印响应体System.out.println(response.body().string());} else {System.out.println("Request failed: " + response.code());}}
});
5.6 性能优化
在实现OKHttp客户端时,可以考虑以下性能优化策略:
- 连接池:OKHttp默认使用连接池,可以复用连接,减少连接建立的开销。
- 请求缓存:可以配置请求缓存,以提高重复请求的性能。
- 异步处理:使用异步请求处理,提高并发处理能力,避免阻塞主线程。
5.7 安全性考虑
在使用OKHttp客户端时,安全性也是一个重要的考虑因素:
- HTTPS支持:确保使用HTTPS协议进行安全的数据传输,保护用户隐私。
- 证书验证:在生产环境中,确保对SSL证书进行验证,以防止中间人攻击。
OKHttp客户端是SOCKS5代理转发器的重要组成部分,负责通过SOCKS5代理发送HTTP请求。通过合理的结构设计和实现,OKHttp客户端能够高效地处理网络请求。
6. 总结
在本文中,我们深入探讨了如何使用Java构建一个高效的SOCKS5代理转发器,系统地分析了其三个主要模块:Server服务器、节点客户端和OKHttp客户端。通过详细的实现步骤和代码示例,我们展示了每个模块的功能、结构和实现细节。以下是对整个项目的总结和反思。
6.1 项目概述
SOCKS5代理是一种灵活且高效的网络协议,能够通过中间服务器转发网络请求。我们的项目旨在实现一个简单的SOCKS5代理转发器,主要由以下三个模块组成:
-
Server服务器:使用Netty框架实现,负责监听来自节点客户端的连接请求,并处理SOCKS5请求。Server服务器的设计确保了高并发连接的处理能力,并通过合理的连接管理和请求转发机制,提升了系统的整体性能。
-
节点客户端:使用Java原生Socket实现,负责与Server服务器保持连接,并处理来自Server的请求。节点客户端能够识别SOCKS5和HTTP协议的数据,并根据协议将请求转发到目标服务。通过合理的异常处理和请求解析逻辑,节点客户端确保了请求的准确性和响应的及时性。
-
OKHttp客户端:作为一个流行的HTTP客户端,OKHttp用于向Server服务器的SOCKS5端口发送请求。通过配置SOCKS5代理,OKHttp客户端能够轻松地构建和发送HTTP请求,并处理响应。其异步请求的能力使得网络操作更加高效,避免了主线程的阻塞。
6.2 技术实现
在实现过程中,我们使用了多种技术和工具:
- Java:作为主要编程语言,提供了丰富的网络编程API,支持Socket通信和多线程处理。
- Netty:高性能的网络通信框架,简化了Server服务器的实现,支持异步非阻塞IO,能够高效处理大量并发连接。
- OKHttp:强大的HTTP客户端库,支持异步请求和连接池,能够有效提高网络请求的性能。
6.3 安全性和性能优化
在整个项目中,我们也考虑了安全性和性能优化:
- 安全性:通过实现身份验证机制和使用TLS/SSL加密传输数据,确保了用户的隐私和数据安全。
- 性能优化:通过连接池、请求缓存和异步处理等策略,提高了系统的响应速度和并发处理能力。
6.4 未来的扩展
虽然我们实现了一个基本的SOCKS5代理转发器,但仍有许多可以扩展和改进的地方:
- 支持更多协议:可以扩展支持更多的网络协议,如FTP、SMTP等,以满足不同的应用场景。
- 增强的日志记录和监控:实现更详细的日志记录和监控功能,以便于后续的故障排查和性能分析。
- 用户界面:为代理服务提供一个简单的用户界面,方便用户配置和管理代理设置。
码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识,点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

相关文章:
构建高效的Java SOCKS5代理:从零开始的网络转发实现
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
spring-boot(绑定配置文件及应用)
配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的; application.properties application.yml 配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好; YAML&#x…...
Mac OS 搭建MySQL开发环境
Mac OS 搭建MySQL开发环境 文章目录 Mac OS 搭建MySQL开发环境一、安装Mysql:二、配置环境变量三、安装Navicat 本地环境: Mac OS Sequoia15.0.1(M3 Max) 目标状态: 下载安装Mysql,配置相关环境。 一、安装Mysql&…...
windows下安装python库wordCloud报错
换电脑安装wordcloud半天安装失败,记录一下遇到的坑,也给大家节省点时间。 方法1: 错误呢就是下面这个,说没c编译器,要不就去他给的地址上安装一下,我安装了一下好像没什么用,也没太敢勾选&am…...
Spring IOC 自动装配(注入)
注解⽅式注⼊ Bean 对于 bean 的注⼊,除了使⽤ xml 配置以外,可以使⽤注解配置。注解的配置,可以简化配置⽂件, 提⾼开发的速度,使程序看上去更简洁。对于注解的解释,Spring对于注解有专⻔的解释器&#…...
Go使用SIMD指令——以string转为整数为例
本文Go使用SIMD指令采用如下方式: C编写对应的程序clang编译成汇编c2goasm将上述生成的汇编转为go的汇编 准备工具 clang。直接使用apt-get install clang安装即可c2goasm。 go get -u github.com/minio/c2goasm来进行安装asm2plan9s。 go get -u github.com/min…...
分享资源合集
为了方便临时使用到的一些软件,提供百度网盘下载。 通过百度网盘分享的文件:WinHex 21.2 SR-2_x86_x64.exe 链接:https://pan.baidu.com/s/19RAnHl_VcKUcIKADU9z9Gw?pwd6666 提取码:6666 通过百度网盘分享的文件:Zi…...
C#/WinForm 鼠标穿透自定义区域截图(后续实现录屏)
效果 窗体截图录屏 git地址:https://gitee.com/feng-cai/screenshot-recording...
基于SpringBoot的“社区维修平台”的设计与实现(源码+数据库+文档+PPT)
基于SpringBoot的“社区维修平台”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 管理员登录页面 住户管理页面 社区公关管理页面 维…...
图书管理系统汇报
【1A536】图书管理系统汇报 项目介绍1.用户登录注册功能1. 1用户角色管理2.图书管理功能2.1 添加图书2.2 编辑图书2.3 删除图书 3.图书搜索和筛选3.1 图书搜索3.2 图书筛选 4.图书借阅、图书归还4.1 图书借阅4.2 图书归还 5.用户信息管理5.1上传头像5.2修改头像5.3 修改密码 项…...
【发版通知】FormMaking 表单设计器新版发布,赋能企业实现低代码开发!
FormMaking 介绍 FormMaking 是基于 Vue 的可视化表单设计器,赋能企业实现低代码开发模式;帮助开发者从传统枯燥的表单代码中解放出来,更多关注业务,快速提高效率,节省研发成本。目前已经在OA系统、考试系统、报表系统…...
计算机科学与技术-毕业设计选题推荐
基于特定技术的系统设计与实现 基于深度学习的图像识别系统设计与实现基于区块链的数据安全保护技术研究与实现基于云计算的大数据处理平台设计与开发基于物联网的智能家居系统设计与实现基于机器学习的推荐算法研究与实现 面向实际应用的需求分析与开发 智慧医疗信息系统设…...
《C++音频频谱分析:开启声音世界的神秘之门》
在数字音频的广阔领域中,频谱分析是一项强大而引人入胜的技术。它能够将无形的声音转化为可视化的数据,让我们深入了解音频的特征和结构。那么,在 C这个强大的编程语言中,我们又该如何实现对音频的频谱分析呢? 音频频…...
GitHub 上传项目保姆级教程
构建项目仓库 登录 GitHub 并进入主页。点击右上角的 New 按钮,进入创建新仓库页面。输入仓库名称和描述(可选),选择是否公开(Public)或私有(Private)。可以选择是否初始化仓库&…...
联想笔记本电脑睡眠后打开黑屏解决方法
下载联想机器睡眠无法唤醒修复工具 下载地址:https://tools.lenovo.com.cn/exeTools/detail/id/233/rid/6182522.html 使用完后重启电脑,问题解决。...
计算机网络:网络层 —— 路由选择与静态路由配置
文章目录 路由选择路由选择的基本概念路由选择算法路由选择策略 路由器的工作原理路由表静态路由配置默认路由特定主机路由 路由选择 路由选择(Routing)是网络层的一个关键功能,负责在源和目的地之间选择最佳路径,以确保数据包高…...
[LeetCode-55]基于贪心算法的跳跃游戏的求解(C语言版)
/* 题目出处:LeetCode 题目序号:55. 跳跃游戏 题目叙述:给你一个非负整数数组 nums ,你最初位于数组的第一个下标位置 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可…...
C# 将批量图片转为PDF文件
目录 功能实现 范例运行环境 关键代码 组件库引入 将批量图片转换为PDF 总结 功能实现 功能实现主要使用 iTextSharp 库实现,将指定目录下的有序的一组图片,组合生成指定文件名的PDF文件。 范例运行环境 操作系统: Windows Server…...
大模型面试题63题(1-11)
扫一扫,实时跟踪面试题(关注“算法狗”)就可以啦 1. 什么是大型语言模型(LLMs)以及它们的工作原理是什么? 大型语言模型(LLMs)是设计用来理解、处理和生成类似人类文本的高级人工智…...
【Flask】二、Flask 路由机制
目录 什么是路由? Flask中的路由 基本路由 动态路由 路由中的HTTP方法 路由函数返回 在Web开发中,路由是将URL映射到相应的处理函数的过程。Flask是一个轻量级的Web应用框架,提供了简单而强大的路由机制,使得开发者能够轻松…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
DiscuzX3.5发帖json api
参考文章:PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下,适配我自己的需求 有一个站点存在多个采集站,我想通过主站拿标题,采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...
【java面试】微服务篇
【java面试】微服务篇 一、总体框架二、Springcloud(一)Springcloud五大组件(二)服务注册和发现1、Eureka2、Nacos (三)负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...
Netty自定义协议解析
目录 自定义协议设计 实现消息解码器 实现消息编码器 自定义消息对象 配置ChannelPipeline Netty提供了强大的编解码器抽象基类,这些基类能够帮助开发者快速实现自定义协议的解析。 自定义协议设计 在实现自定义协议解析之前,需要明确协议的具体格式。例如,一个简单的…...
java 局域网 rtsp 取流 WebSocket 推送到前端显示 低延迟
众所周知 摄像头取流推流显示前端延迟大 传统方法是服务器取摄像头的rtsp流 然后客户端连服务器 中转多了,延迟一定不小。 假设相机没有专网 公网 1相机自带推流 直接推送到云服务器 然后客户端拉去 2相机只有rtsp ,边缘服务器拉流推送到云服务器 …...
若依项目部署--传统架构--未完待续
若依项目介绍 项目源码获取 #Git工具下载 dnf -y install git #若依项目获取 git clone https://gitee.com/y_project/RuoYi-Vue.git项目背景 随着企业信息化需求的增加,传统开发模式存在效率低,重复劳动多等问题。若依项目通过整合主流技术框架&…...
