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

构建高效的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是一个高性能的网络通信框架,能够处理大量并发连接,适合构建高效的网络应用。

交互流程

  1. Server服务器启动并监听端口1和端口2。
  2. 节点客户端连接到端口1,建立持久连接。
  3. 当OKHttp客户端向端口2发送SOCKS5请求时,Server服务器接收请求并解析。
  4. Server服务器将解析后的请求转发到已连接的节点客户端。
2.2 节点客户端

功能
  节点客户端的主要职责是与Server服务器保持连接,并处理来自Server的请求。它能够识别SOCKS5和HTTP协议的数据,并根据协议将请求转发到目标服务。

技术栈
  节点客户端将使用Java原生Socket实现,确保轻量级和高效性。通过Socket API,节点客户端能够直接与Server服务器进行数据交换。

交互流程

  1. 节点客户端启动并连接到Server服务器的端口1。
  2. 节点客户端监听来自Server的消息。
  3. 当接收到SOCKS5请求时,节点客户端解析请求并与目标服务建立连接。
  4. 节点客户端将请求转发到目标服务,并接收响应。
  5. 最后,节点客户端将响应数据回传给Server服务器。
2.3 OKHttp客户端

功能
  OKHttp客户端用于向Server服务器的端口2发送SOCKS5请求。它能够轻松地构建HTTP请求,并通过SOCKS5代理进行网络访问。

技术栈
  OKHttp是一个高效的HTTP客户端库,支持异步请求和连接池等功能。它将用于构建和发送HTTP请求。

交互流程

  1. OKHttp客户端构建一个SOCKS5请求,并将其发送到Server服务器的端口2。
  2. Server服务器接收请求并将其转发到节点客户端。
  3. 节点客户端处理请求并与目标服务交互。
  4. 最后,节点客户端将响应数据回传给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服务器的功能
  1. 监听端口:Server服务器需要监听两个端口,一个用于节点客户端的连接,另一个用于处理SOCKS5请求。
  2. 处理连接:当节点客户端连接到Server服务器时,服务器需要保持该连接,并能够在后续的请求中使用。
  3. 转发请求:当接收到SOCKS5请求时,Server服务器需要将请求转发到与节点客户端的连接上,并等待响应。
  4. 返回响应:将节点客户端的响应数据返回给发起请求的客户端。
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 节点客户端的功能
  1. 建立连接:节点客户端启动后,首先与Server服务器的端口1建立连接。
  2. 监听消息:节点客户端需要持续监听来自Server的消息,以便及时处理请求。
  3. 解析请求:当接收到SOCKS5或HTTP请求时,节点客户端需要解析请求内容。
  4. 转发请求:根据解析的请求内容,节点客户端与目标服务建立连接,并将请求转发。
  5. 返回响应:将目标服务的响应数据回传给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请求,解析过程通常包括以下几个步骤:

  1. 读取请求头:根据SOCKS5协议,读取请求的头部信息,包括版本、命令、目标地址和目标端口。
  2. 处理不同的命令:SOCKS5协议支持多种命令,如CONNECT、BIND和UDP ASSOCIATE。根据命令类型,执行相应的操作。
  3. 建立与目标服务的连接:根据解析到的目标地址和端口,与目标服务建立连接。

以下是一个简单的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客户端的功能
  1. 配置代理:在创建OKHttpClient实例时,配置SOCKS5代理的地址和端口。
  2. 构建请求:使用OKHttp的Builder模式构建HTTP请求。
  3. 发送请求:通过OKHttp的异步或同步方式发送请求,并接收响应。
  4. 处理响应:解析响应数据并进行相应的处理。
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 代码解析
  1. 配置SOCKS5代理

    • 在创建OkHttpClient实例时,使用Builder模式配置SOCKS5代理的地址和端口。
    • 通过java.net.Proxy类指定代理类型为SOCKS,并提供代理的地址和端口。
  2. 构建HTTP请求

    • 使用Request.Builder构建HTTP请求,指定目标URL。
    • 可以根据需要添加请求头、请求体等信息。
  3. 发送请求

    • 使用client.newCall(request).execute()方法发送请求,并获取响应。
    • 这里使用的是同步请求,如果希望使用异步请求,可以使用enqueue方法。
  4. 处理响应

    • 检查响应是否成功,通过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代理转发器,主要由以下三个模块组成:

  1. Server服务器:使用Netty框架实现,负责监听来自节点客户端的连接请求,并处理SOCKS5请求。Server服务器的设计确保了高并发连接的处理能力,并通过合理的连接管理和请求转发机制,提升了系统的整体性能。

  2. 节点客户端:使用Java原生Socket实现,负责与Server服务器保持连接,并处理来自Server的请求。节点客户端能够识别SOCKS5和HTTP协议的数据,并根据协议将请求转发到目标服务。通过合理的异常处理和请求解析逻辑,节点客户端确保了请求的准确性和响应的及时性。

  3. 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代理:从零开始的网络转发实现

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

spring-boot(绑定配置文件及应用)

配置文件 SpringBoot使用一个全局的配置文件&#xff0c;配置文件名是固定的&#xff1b; application.properties application.yml 配置文件的作用&#xff1a;修改SpringBoot自动配置的默认值&#xff1b;SpringBoot在底层都给我们自动配置好&#xff1b; YAML&#x…...

Mac OS 搭建MySQL开发环境

Mac OS 搭建MySQL开发环境 文章目录 Mac OS 搭建MySQL开发环境一、安装Mysql&#xff1a;二、配置环境变量三、安装Navicat 本地环境&#xff1a; Mac OS Sequoia15.0.1&#xff08;M3 Max) 目标状态&#xff1a; 下载安装Mysql&#xff0c;配置相关环境。 一、安装Mysql&…...

windows下安装python库wordCloud报错

换电脑安装wordcloud半天安装失败&#xff0c;记录一下遇到的坑&#xff0c;也给大家节省点时间。 方法1&#xff1a; 错误呢就是下面这个&#xff0c;说没c编译器&#xff0c;要不就去他给的地址上安装一下&#xff0c;我安装了一下好像没什么用&#xff0c;也没太敢勾选&am…...

Spring IOC 自动装配(注入)

注解⽅式注⼊ Bean 对于 bean 的注⼊&#xff0c;除了使⽤ xml 配置以外&#xff0c;可以使⽤注解配置。注解的配置&#xff0c;可以简化配置⽂件&#xff0c; 提⾼开发的速度&#xff0c;使程序看上去更简洁。对于注解的解释&#xff0c;Spring对于注解有专⻔的解释器&#…...

Go使用SIMD指令——以string转为整数为例

本文Go使用SIMD指令采用如下方式&#xff1a; C编写对应的程序clang编译成汇编c2goasm将上述生成的汇编转为go的汇编 准备工具 clang。直接使用apt-get install clang安装即可c2goasm。 go get -u github.com/minio/c2goasm来进行安装asm2plan9s。 go get -u github.com/min…...

分享资源合集

为了方便临时使用到的一些软件&#xff0c;提供百度网盘下载。 通过百度网盘分享的文件&#xff1a;WinHex 21.2 SR-2_x86_x64.exe 链接&#xff1a;https://pan.baidu.com/s/19RAnHl_VcKUcIKADU9z9Gw?pwd6666 提取码&#xff1a;6666 通过百度网盘分享的文件&#xff1a;Zi…...

C#/WinForm 鼠标穿透自定义区域截图(后续实现录屏)

效果 窗体截图录屏 git地址&#xff1a;https://gitee.com/feng-cai/screenshot-recording...

基于SpringBoot的“社区维修平台”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“社区维修平台”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;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 的可视化表单设计器&#xff0c;赋能企业实现低代码开发模式&#xff1b;帮助开发者从传统枯燥的表单代码中解放出来&#xff0c;更多关注业务&#xff0c;快速提高效率&#xff0c;节省研发成本。目前已经在OA系统、考试系统、报表系统…...

计算机科学与技术-毕业设计选题推荐

基于特定技术的系统设计与实现 基于深度学习的图像识别系统设计与实现基于区块链的数据安全保护技术研究与实现基于云计算的大数据处理平台设计与开发基于物联网的智能家居系统设计与实现基于机器学习的推荐算法研究与实现 面向实际应用的需求分析与开发 智慧医疗信息系统设…...

《C++音频频谱分析:开启声音世界的神秘之门》

在数字音频的广阔领域中&#xff0c;频谱分析是一项强大而引人入胜的技术。它能够将无形的声音转化为可视化的数据&#xff0c;让我们深入了解音频的特征和结构。那么&#xff0c;在 C这个强大的编程语言中&#xff0c;我们又该如何实现对音频的频谱分析呢&#xff1f; 音频频…...

GitHub 上传项目保姆级教程

构建项目仓库 登录 GitHub 并进入主页。点击右上角的 New 按钮&#xff0c;进入创建新仓库页面。输入仓库名称和描述&#xff08;可选&#xff09;&#xff0c;选择是否公开&#xff08;Public&#xff09;或私有&#xff08;Private&#xff09;。可以选择是否初始化仓库&…...

联想笔记本电脑睡眠后打开黑屏解决方法

下载联想机器睡眠无法唤醒修复工具 下载地址&#xff1a;https://tools.lenovo.com.cn/exeTools/detail/id/233/rid/6182522.html 使用完后重启电脑&#xff0c;问题解决。...

计算机网络:网络层 —— 路由选择与静态路由配置

文章目录 路由选择路由选择的基本概念路由选择算法路由选择策略 路由器的工作原理路由表静态路由配置默认路由特定主机路由 路由选择 路由选择&#xff08;Routing&#xff09;是网络层的一个关键功能&#xff0c;负责在源和目的地之间选择最佳路径&#xff0c;以确保数据包高…...

[LeetCode-55]基于贪心算法的跳跃游戏的求解(C语言版)

/* 题目出处&#xff1a;LeetCode 题目序号&#xff1a;55. 跳跃游戏 题目叙述&#xff1a;给你一个非负整数数组 nums &#xff0c;你最初位于数组的第一个下标位置 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标&#xff0c;如果可…...

C# 将批量图片转为PDF文件

目录 功能实现 范例运行环境 关键代码 组件库引入 ​将批量图片转换为PDF 总结 功能实现 功能实现主要使用 iTextSharp 库实现&#xff0c;将指定目录下的有序的一组图片&#xff0c;组合生成指定文件名的PDF文件。 范例运行环境 操作系统&#xff1a; Windows Server…...

大模型面试题63题(1-11)

扫一扫&#xff0c;实时跟踪面试题&#xff08;关注“算法狗”&#xff09;就可以啦 1. 什么是大型语言模型&#xff08;LLMs&#xff09;以及它们的工作原理是什么&#xff1f; 大型语言模型&#xff08;LLMs&#xff09;是设计用来理解、处理和生成类似人类文本的高级人工智…...

【Flask】二、Flask 路由机制

目录 什么是路由&#xff1f; Flask中的路由 基本路由 动态路由 路由中的HTTP方法 路由函数返回 在Web开发中&#xff0c;路由是将URL映射到相应的处理函数的过程。Flask是一个轻量级的Web应用框架&#xff0c;提供了简单而强大的路由机制&#xff0c;使得开发者能够轻松…...

Java项目实战II基于Spring Boot的交通管理在线服务系统设计与实现(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着城市化…...

【PythonWeb开发】Flask-RESTful视图类基础知识

flask_restful 是一个扩展库&#xff0c;它为 Flask 提供了快速构建 RESTful API 的功能。使用 flask_restful 可以简化 RESTful API 的开发过程&#xff0c;减少样板代码&#xff0c;并且提供了一些高级特性&#xff0c;如 HTTP 方法的映射、资源路由的定义等。 在flask_restf…...

Kubernetes——part10-2 kubernetes 日志收集方案 EFK

一、EFK 1.1 EFK介绍 EFK为elasticsearch、fluentd、kibana的简称&#xff0c;本案例主要对kubernetes集群日志收集。 1.2 Fluentd介绍 fluentd是一款开源的日志收集工具&#xff0c;其于2016年11月8日被云原生计算基金会录取&#xff0c;并于2019年毕业。 Fluentd优势&…...

mockito+junit完成单元测试

一&#xff1a;单元测试的特点 配合断言使用&#xff08;可以杜绝System.out&#xff09;可以重复执行不依赖环境不会对数据产生影响spring的上下文环境不是必须的一般都需要配合mock类框架来实现 二&#xff1a;常用的mock类框架 mockito 官网&#xff1a;Mockito framew…...

基于web的便捷饭店点餐小程序的设计与实现(lw+演示+源码+运行)

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对高校教师成果信息管理混乱&#xff0c;出错率高&#xff0c;信息安全…...

CUDA环境安装终极指南——Linux(其它系统也一样)

文章目录 前言检查驱动配置nvcc安装cudnn完活 前言 不用看其它文章了&#xff0c;这篇文章保你不踩任何坑&#xff0c;安装方法简单快速 检查驱动 检查驱动是否安装&#xff0c;输入以下命令 nvidia-smi如果驱动已经安装&#xff0c;则可跳过此步&#xff0c;否则&#xff…...

安卓开发之登录页面(跳转版)

目录 前言&#xff1a;基础夯实&#xff1a;效果展示&#xff1a;核心代码&#xff1a;网盘源码&#xff1a; 前言&#xff1a; 熟悉安卓开发的基础知识&#xff0c;了解&#xff0c;弹窗&#xff0c;两个页面进行跳转&#xff0c;页面的布局&#xff0c;按钮&#xff0c;文本…...

solidworks学习6吊环-20241030

solidworks学习6吊环 图 1 使用到的命名&#xff1a;拉伸曲面&#xff0c;旋转曲面&#xff0c;镜像实体&#xff0c;剪裁曲面&#xff0c; 前视基准面绘制 图 2 绘制旋转轴 图 3 旋转曲面 图 4 上视基准面绘制&#xff0c;标准圆边尺寸的时候需要按住shift键标注&#x…...

数据结构和算法-动态规划(3)-经典问题

动态规划常见问题 打家劫舍 题目 [力扣198] 198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 题目描述 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&…...

Java算法-一维前缀和与差分

一、一维前缀和 ① 什么是一维前缀和&#xff1f; &#x1f4da; 其实通过名字就能知道" 一维前缀和 "的意思&#xff1a; 通过一个一维数组"arr1"而创建的另一个一维数组"arr2"&#xff0c;"arr2"的每一个元素都是"arr1"…...

怎样用记事本做网站/搜索引擎广告图片

从零开始用 Flask 搭建一个网站&#xff08;二&#xff09; 从零开始用 Flask 搭建一个网站&#xff08;一&#xff09; 介绍了如何搭建 Python 环境&#xff0c;以及 Flask 应用基本项目结构。我们要搭建的网站是管理第三方集成的控制台&#xff0c;类似于 Slack。 本篇主要讲…...

广州市公司网站建设品牌/常州seo博客

ioc&#xff0c;全称是Inversion of Control&#xff0c;字面理解叫控制反转。既然叫控制反转&#xff0c;那就是原来谁控制&#xff0c;后面转给了谁。 那着手点先从原来的“控制正转”切入&#xff0c;在oop中&#xff0c;操作的都是object基本上都是实例化、赋值属性、接口调…...

wordpress主题手机版/app推广文案

1. 解压本地固件库包后需要将文件夹放到指定路径&#xff0c;该指定路径为cubemx软件中的help -> updater settings -> updater settings -> repository folder中的路径&#xff0c;本人的路径为C:/Users/WR/STM32Cube/Repository/。之前没有放到指定路径&#xff0c;…...

建站合同模板/成都黑帽seo

Print也许是Python中使用频率最高的一个函数。很多小白都是从Hello World程序开始认识Python&#xff0c;而Python的Hello World程序只有一行&#xff0c;那就是调用内置的Print函数&#xff0c;向控制台输出字符串“Hello World”。 不仅小白&#xff0c;哪怕是Python开发者&a…...

有没有做网站的/网站提交收录入口

一点都不懂的要知道的电工基础知识、电工证多久可以拿&#xff1f;​英杰职业教育主要办理电工培训考证&#xff0c;焊工培训考证&#xff0c;高空考证&#xff0c;叉车培训考证&#xff0c;等特种职业培训考证年审&#xff0c;有考证班&#xff0c;学习班&#xff0c;VIP班证全…...

wordpress登录还是登录页面/企业网站推广策划书

打开E4A&#xff0c;使用WINHEX打开RAM选择E4A主存储器&#xff0c;搜索16进制字串 0F854B000000 &#xff0c;找到的第一个地址修改为 909090909090&#xff0c;保存后&#xff0c;返回E4A就可以编译发布版了。 转载于:https://www.cnblogs.com/fox2013/p/3672466.html...