【Java网络编程】使用Tcp和Udp实现一个小型的回声客户端服务器程序

网络编程的概念

Java中的网络编程是指使用Java语言及其库创建和管理网络应用程序的过程。这一过程使得不同的计算机可以通过网络进行通信和数据交换。Java提供了一系列强大的API(应用程序编程接口)来支持网络编程,主要涉及以下几个概念:

  1. Socket:Socket是网络通信的基础,代表一个网络连接的端点。在Java中,Socket类用于实现客户端的网络通信,而ServerSocket类用于实现服务器的网络通信。通过Socket,客户端可以连接到服务器,进行数据的发送和接收。

  2. 协议:网络通信通常依赖于特定的通信协议,如TCP(传输控制协议)和UDP(用户数据报协议)。TCP是一种面向连接的协议,提供可靠的数据传输;而UDP则是一种无连接的协议,适用于对速度要求较高但对可靠性要求较低的场景。

  3. IP地址和端口号:IP地址用于唯一标识网络上的设备,而端口号则用于标识特定的应用程序或服务。Java网络编程中,需要通过这些信息来建立连接。

  4. URL(统一资源定位符):Java中的网络编程还涉及到处理URL,使用URL类可以轻松地访问网络资源,如网页和文件。

  5. 多线程:在网络编程中,尤其是服务器端,使用多线程可以提高并发处理能力,允许多个客户端同时连接和交互。

  6. 数据流:Java网络编程中通常涉及输入流和输出流进行数据的读写,这使得客户端和服务器可以方便地交换信息。

Java的网络编程广泛应用于各种应用场景,如网页服务、网络游戏、即时通讯工具等。通过这些技术,开发者能够构建灵活且高效的网络应用,便捷地实现信息的传递与共享。

使用Udp协议实现简单的客户端服务器程序

服务器代码编写

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;/*** 自定义UDP服务器程序*/
public class UdpEchoServer {// 创建DatagramSocket对象,用于接收和发送UDP数据包private DatagramSocket socket = null;/*** 构造函数,初始化DatagramSocket并绑定到指定端口* * @param port 服务器监听的端口号* @throws SocketException 创建Socket时抛出的异常*/public UdpEchoServer(int port) throws SocketException {this.socket = new DatagramSocket(port);}/*** 启动UDP服务器,开始监听和处理客户端请求* * @throws IOException 处理数据包时可能抛出的异常*/public void start() throws IOException {// 输出服务器启动信息System.out.println("服务器启动!!");// 持续监听客户端请求while (true) {// 创建一个空的数据包,用于接收客户端发送的数据DatagramPacket requestPacket = new DatagramPacket(new byte[4096], 4096);// 接收客户端发送的数据包socket.receive(requestPacket);// 将接收到的数据转换为字符串String request = new String(requestPacket.getData(), 0, requestPacket.getLength());// 处理请求并生成相应的响应数据String response = process(request);// 创建响应数据包,包含响应内容DatagramPacket responsePacket = new DatagramPacket(response.getBytes(),response.getBytes().length, requestPacket.getSocketAddress());// 发送响应数据包回客户端socket.send(responsePacket);// 输出请求的信息和服务器的响应System.out.printf("[%s,%d],%s,%s\n", requestPacket.getAddress(), requestPacket.getPort(),request, response);}}/*** 处理客户端请求* * @param request 客户端发送的请求* @return 返回响应内容*/protected String process(String request) {// 此处简单返回请求内容,作为回声服务器return request;}/*** 主函数,程序入口* * @param args 命令行参数* @throws IOException 启动服务器时可能抛出的异常*/public static void main(String[] args) throws IOException {// 创建UDP服务器,监听9090端口UdpEchoServer server = new UdpEchoServer(9090);// 启动服务器server.start();}
}

代码实现和功能解析:

  1. 类定义UdpEchoServer类定义了一个简单的UDP回声服务器,使用UDP协议与客户端进行通信。

  2. 成员变量

    • private DatagramSocket socket:用于发送和接收UDP数据包的DatagramSocket。
  3. 构造函数

    • UdpEchoServer(int port):创建一个DatagramSocket对象并绑定到指定的端口。端口号作为参数传入。
  4. 启动服务器

    • public void start():这个方法负责启动服务器并处理来自客户端的请求。
      • 在方法内,使用一无限循环while (true)来持续监听客户端请求。
      • 创建一个DatagramPacket对象用于接收数据。
  5. 接收数据

    • 使用socket.receive(requestPacket)接收客户端发送的UDP数据包。
  6. 处理请求

    • 将接收到的数据转换为字符串,调用process方法来处理请求。此例中,process方法简单地返回请求的内容。
  7. 发送响应

    • 创建一个响应数据包,并使用socket.send(responsePacket)方法将响应发送回客户端。
  8. 输出请求和响应信息

    • 使用System.out.printf()打印客户端信息(地址和端口)、请求内容及响应内容。
  9. 主方法

    • public static void main(String[] args)是程序入口,创建一个UdpEchoServer实例,并在9090端口启动服务器。

功能总结:

这个UDP回声服务器能够接收客户端发送的UDP数据包,并将相同的数据回传给客户端。它可以处理多个客户端请求,实现基本的网络通信功能,适用于需要快速、简单消息传递的应用场景。

客户端代码编写

import java.io.IOException;
import java.net.*;
import java.util.Scanner;/*** 自定义UDP客户端程序*/
public class UdpEchoClient {// 发送和接收UDP数据包的Socket对象private DatagramSocket socket = null;// 服务器的IP地址private String ip;// 服务器的端口号private int port;/*** 构造函数,初始化DatagramSocket并设置服务器的IP和端口* * @param ip   服务器的IP地址* @param port 服务器的端口号* @throws SocketException 创建Socket时抛出的异常*/public UdpEchoClient(String ip, int port) throws SocketException {this.socket = new DatagramSocket(); // 创建一个无特定端口的DatagramSocketthis.ip = ip; // 设置服务器的IPthis.port = port; // 设置服务器的端口}/*** 启动UDP客户端,发送请求并接收响应* * @throws IOException 处理数据包时可能抛出的异常*/public void start() throws IOException {System.out.println("客户端启动!!"); // 输出客户端启动信息while (true) {// 创建Scanner对象用于接收用户输入Scanner scanner = new Scanner(System.in);System.out.println("->"); // 提示用户输入String request = scanner.next(); // 读取用户输入的请求内容// 创建请求数据包DatagramPacket requestPacket = new DatagramPacket(request.getBytes(), request.getBytes().length,InetAddress.getByName(ip), port);// 发送请求数据包到服务器socket.send(requestPacket);// 创建响应数据包,用于接收服务器的响应DatagramPacket responsePacket = new DatagramPacket(new byte[4096], 4096);// 接收服务器发送的响应socket.receive(responsePacket);// 将接收到的响应数据转换为字符串String response = new String(responsePacket.getData(), 0, responsePacket.getLength());// 输出服务器的响应System.out.println(response);}}/*** 主函数,程序入口* * @param args 命令行参数* @throws IOException 初始化客户端时可能抛出的异常*/public static void main(String[] args) throws IOException {// 创建UDP客户端,连接到本地服务器9090端口UdpEchoClient client = new UdpEchoClient("127.0.0.1", 9090);// 启动客户端client.start();}
}

代码实现和功能解析:

  1. 类定义UdpEchoClient 类定义了一个UDP客户端,该客户端能够向服务器发送请求并接收响应。

  2. 成员变量

    • private DatagramSocket socket:用于发送和接收UDP数据包的DatagramSocket。
    • private String ip:服务器的IP地址。
    • private int port:服务器的端口号。
  3. 构造函数

    • UdpEchoClient(String ip, int port):在构造函数中,创建一个DatagramSocket实例并绑定到一个随机端口。设置服务器的IP和端口,以便后续发送请求。
  4. 启动客户端

    • public void start():该方法负责启动客户端并处理用户输入。
      • 输出“客户端启动!!”以确认客户端已启动。
      • 进入一个无限循环,使用Scanner类接收用户输入的信息。
  5. 发送请求

    • 用户输入请求数据后,生成一个DatagramPacket(请求数据包),包括请求数据、地址(服务器的IP)和端口号(服务器的端口)。
    • 调用socket.send(requestPacket)将请求数据包发送到服务器。
  6. 接收响应

    • 创建一个大小为4096字节的DatagramPacket(响应数据包)用于接收来自服务器的响应。
    • 使用socket.receive(responsePacket)方法接收服务器返回的响应。
  7. 处理响应

    • 将接收到的响应数据通过new String()转换为字符串,并输出到控制台。
  8. 主方法

    • public static void main(String[] args)是程序的入口点,首先创建一个客户端实例,连接到本机的9090端口的服务器,然后调用start()方法启动客户端。

功能总结:

这个UDP客户端能够实时接收用户输入,将输入数据通过UDP协议发送给指定的服务器(在本例中是本地服务器),并输出服务器回传的响应。它可以用于测试UDP服务,验证网络连接和数据传输的有效性。同时,该客户端可以适应多种应用场景,如即时消息传递、简单的命令行交互等。

Udp简单回声客户端服务器程序使用

首先运行 UdpEchoServer 类(Udp服务器),在使用客户端通信之前必须先保证启动了服务器。

其次运行 UdpEchoClient 类(Udp客户端)。

在客户端发送需求:

服务器结果显示: 

使用Tcp协议实现简单的客户端服务器程序

服务器代码编写

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;/*** 自定义TCP回声服务器程序*/
public class TcpEchoServer {// ServerSocket对象,用于监听连接请求private ServerSocket socket = null;/*** 构造函数,初始化ServerSocket并绑定到指定的端口* * @param port 服务器监听的端口号* @throws IOException 创建ServerSocket时抛出的异常*/public TcpEchoServer(int port) throws IOException {this.socket = new ServerSocket(port); // 在指定端口创建一个ServerSocket}/*** 启动TCP服务器,开始接受客户端连接* * @throws IOException 处理请求时可能抛出的异常*/public void start() throws IOException {System.out.println("服务器启动!"); // 输出服务器启动信息// 创建一个线程池,用于处理多个客户端的连接ExecutorService executorService = Executors.newFixedThreadPool(10);while (true) {// 等待并接受来自客户端的连接Socket clientSocket = socket.accept();// 启动一个新线程来处理该客户端的请求executorService.submit(new Runnable() {@Overridepublic void run() {try {processConnection(clientSocket); // 处理与客户端的连接} catch (IOException e) {throw new RuntimeException(e); // 捕获异常并抛出}}});}}/*** 处理与客户端的连接* * @param clientSocket 与客户端的Socket连接* @throws IOException 处理输入输出流时可能抛出的异常*/private void processConnection(Socket clientSocket) throws IOException {// 输出客户端的地址和端口System.out.printf("[%s,%d],客户端已连接!\n", clientSocket.getInetAddress(), clientSocket.getPort());try (InputStream inputStream = clientSocket.getInputStream(); // 获取输入流OutputStream outputStream = clientSocket.getOutputStream()) { // 获取输出流while (true) {Scanner scanner = new Scanner(inputStream); // 创建Scanner以读取输入流if (!scanner.hasNext()) { // 如果没有输入,客户端下线System.out.println("客户端下线!\n");break; // 退出循环}String request = scanner.next(); // 读取请求String response = process(request); // 处理请求并生成响应// 创建PrintWriter以发送响应PrintWriter printWriter = new PrintWriter(outputStream);printWriter.println(response); // 发送响应数据printWriter.flush(); // 刷新输出流,强制将数据发送// 输出请求和响应的信息System.out.printf("[%s,%d],请求:%s,响应:%s\n", clientSocket.getInetAddress(),clientSocket.getPort(), request, response);}} catch (IOException e) {e.printStackTrace(); // 捕获并打印异常} finally {clientSocket.close(); // 关闭与客户端的连接}}/*** 处理客户端请求并生成响应* * @param request 客户端发送的请求* @return 返回响应内容*/private String process(String request) {// 此处简单返回请求内容,作为回声服务器return request;}/*** 主函数,程序入口* * @param args 命令行参数* @throws IOException 启动服务器时可能抛出的异常*/public static void main(String[] args) throws IOException {TcpEchoServer server = new TcpEchoServer(9090); // 创建TcpEchoServer实例,监听9090端口server.start(); // 启动服务器}
}

代码实现和功能解析:

  1. 类定义TcpEchoServer 类实现了一个TCP回声服务器,能够接受客户端的连接并回传客户端发送的信息。

  2. 成员变量

    • private ServerSocket socket:用于监听连接请求的ServerSocket对象。
  3. 构造函数

    • TcpEchoServer(int port):在指定端口创建一个ServerSocket以接受连接。
  4. 启动服务器

    • public void start():该方法负责启动服务器并不断监听客户端的连接请求。
      • 输出服务器启动信息。
      • 创建一个线程池,用于并发处理最多10个客户端请求。
  5. 接受连接

    • 使用socket.accept()方法等待并接受客户端的连接。当有客户端连接时,创建一个Socket对象以与客户端进行通信。
  6. 处理连接

    • 对于每个连接,使用executorService.submit()方法将连接的处理逻辑提交到线程池中执行,调用processConnection(clientSocket)方法来处理客户端的请求。
  7. 处理客户端请求

    • processConnection(Socket clientSocket)
      • 输出客户端的IP地址和端口信息。
      • 利用输入流InputStream和输出流OutputStream进行数据交互。
      • 使用Scanner读取客户端发送的请求,直到客户端关闭连接。
      • 对每个请求调用process(request)处理并生成响应,然后通过PrintWriter发送回客户端。
  8. 生成响应

    • process(String request):此示例中,服务器将客户端请求的内容直接返回,作为回声服务器的简单实现。
  9. 主方法

    • public static void main(String[] args)是程序的入口,创建一个TcpEchoServer实例并启动它,监听9090端口。

功能总结:

这个TCP回声服务器能够接受多个客户端的连接,并实现与每个客户端的通信。客户端发送的消息被原样返回,适合用于测试和验证TCP连接的有效性。由于使用了线程池,可以并发处理多个客户端的请求,大大提高了服务器的性能和响应能力。

客户端代码编写

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;/*** 自定义TCP回声客户端程序*/
public class TcpEchoClient {// 与服务器的Socket连接private Socket socket = null;/*** 构造函数,初始化Socket并与服务器建立连接* * @param serverIP 服务器的IP地址* @param port     服务器的端口号* @throws IOException 创建Socket时抛出的异常*/public TcpEchoClient(String serverIP, int port) throws IOException {this.socket = new Socket(serverIP, port); // 创建Socket并连接到指定IP和端口}/*** 启动TCP客户端,发送请求并接收响应*/public void start() {System.out.println("客户端启动!"); // 输出客户端启动信息Scanner scanner = new Scanner(System.in); // 创建Scanner以读取用户输入try (InputStream inputStream = socket.getInputStream(); // 获取与服务器的输入流OutputStream outputStream = socket.getOutputStream()) { // 获取与服务器的输出流PrintWriter printWriter = new PrintWriter(outputStream); // 创建PrintWriter以便发送文本数据while (true) {System.out.println("->"); // 提示用户输入String request = scanner.next(); // 读取用户输入的请求printWriter.println(request); // 发送请求到服务器printWriter.flush(); // 刷新输出流,确保数据被发送Scanner scannerNetwork = new Scanner(inputStream); // 从输入流中读取响应String response = scannerNetwork.next(); // 获取服务器的响应System.out.println(response); // 输出服务器的响应}} catch (IOException e) {throw new RuntimeException(e); // 捕获异常并抛出}}/*** 主函数,程序入口* * @param args 命令行参数* @throws IOException 启动客户端时可能抛出的异常*/public static void main(String[] args) throws IOException {TcpEchoClient client = new TcpEchoClient("127.0.0.1", 9090); // 创建TcpEchoClient实例,连接到本地服务器的9090端口client.start(); // 启动客户端}
}

代码实现和功能解析:

  1. 类定义TcpEchoClient 类实现了一个TCP回声客户端,能够向TCP回声服务器发送请求并获得响应。

  2. 成员变量

    • private Socket socket:存储与服务器的Socket连接对象。
  3. 构造函数

    • TcpEchoClient(String serverIP, int port):在构造函数中,创建一个Socket实例并连接到指定的服务器IP和端口。
  4. 启动客户端

    • public void start() 方法负责启动客户端并处理用户的输入和服务器的响应。
      • 输出“客户端启动!”以确认客户端已启动。
      • 创建一个Scanner对象用于获取用户输入的信息。
  5. 获取输入输出流

    • 使用socket.getInputStream()socket.getOutputStream()分别获取与服务器通信的输入流和输出流。
  6. 发送请求

    • 创建一个PrintWriter对象,以便能够将文本数据写入输出流。
    • 在无限循环中,程序提示用户输入内容,读取用户输入的请求。
    • 将请求通过PrintWriter发送到服务器,并调用flush()方法确保数据被及时发送。
  7. 接收响应

    • 使用Scanner对象从输入流中读取服务器响应的数据。
    • 获取并打印服务器返回的响应内容。
  8. 主方法

    • public static void main(String[] args)是程序的入口,创建一个TcpEchoClient实例并与本地的9090端口的服务器连接,然后调用start()方法启动客户端。

功能总结:

这个TCP回声客户端能够实时读取用户输入,并将输入的数据发送给指定的TCP回声服务器(在本例中是本地服务器的9090端口)。它的功能在于能够发送消息并获得服务器的回声响应,适合实现基本的TCP连接测试和了解客户端与服务器之间的数据交互。由于实现了无限循环,客户端可以持续进行多次交互,直至手动停止。

Tcp简单回声客户端服务器程序使用

首先运行 TcpEchoServer 类(Tcp服务器),在使用客户端之前,必须先启动服务器。

其次运行  TcpEchoClient 类(Tcp服务器)

 在客户端输入请求,得到响应:

在服务器程序观察结果:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/432182.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简易STL实现 | 红黑树的实现

1、原理 红黑树(Red-Black Tree)是一种自平衡的二叉搜索树 红黑树具有以下特性,这些特性保持了树的平衡: 节点颜色: 每个节点要么是红色,要么是黑色根节点颜色: 根节点是黑色的。叶子节点&…

【stm32】TIM定时器输出比较-PWM驱动LED呼吸灯/舵机/直流电机

TIM定时器输出比较 一、输出比较简介1、OC(Output Compare)输出比较2、PWM简介3、输出比较通道(高级)4、输出比较通道(通用)5、输出比较模式6、PWM基本结构配置步骤:程序代码:PWM驱动LED呼吸灯 7、参数计算8、舵机简介程序代码&am…

【笔记】KaiOS 系统框架和应用结构(APP界面逻辑)

KaiOS系统框架 最早自下而上分成Gonk-Gecko-Gaia层,代码有同名的目录,现在已经不用这种称呼。 按照官网3.0的版本迭代介绍,2.5->3.0已经将系统更新成如下部分: 仅分为上层web应用和底层平台核心,通过WebAPIs连接上下层,这也是kaios系统升级变更较大的部分。 KaiOS P…

括号匹配问题 -------------

1.题目说明: 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有…

Jenkins入门:从搭建到部署第一个Springboot项目(踩坑记录)

本文讲述在虚拟机环境下(模拟服务器),使用docker方式搭建jenkins,并部署一个简单的Springboot项目。仅记录关键步骤和遇到的坑,后续再进行细节补充。 一、环境准备和基础工具安装 1. 环境 系统环境为本机vmware创建的Ubuntu24.04。 2. yum…

【C++】STL--string(下)

1.string类对象的修改操作 erase&#xff1a;指定位置删除 int main() {string str1("hello world");str1.push_back(c);//尾插一个ccout << str1 << endl;string str2;str2.append("hello"); // 在str后追加一个字符"hello"cout…

CNN-LSTM预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络时间序列预测

CNN-LSTM预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络时间序列预测 目录 CNN-LSTM预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络时间序列预测预测效果基本介绍模型描述程序设计参考资料预测效果 基本介绍 本次运行测试环境MATLAB2020b 提出一种包含卷积神经网络和长短…

多机部署,负载均衡-LoadBalance

文章目录 多机部署,负载均衡-LoadBalance1. 开启多个服务2. 什么是负载均衡负载均衡的实现客户端负载均衡 3. Spring Cloud LoadBalance快速上手使用Spring Cloud LoadBalance实现负载均衡修改IP,端口号为服务名称启动多个服务 负载均衡策略自定义负载均衡策略 LoadBalance原理…

c++模拟真人鼠标轨迹算法

一.鼠标轨迹算法简介 鼠标轨迹底层实现采用 C / C语言&#xff0c;利用其高性能和系统级访问能力&#xff0c;开发出高效的鼠标轨迹模拟算法。通过将算法封装为 DLL&#xff08;动态链接库&#xff09;&#xff0c;可以方便地在不同的编程环境中调用&#xff0c;实现跨语言的兼…

红外辐射在大气中的衰减原理(含C++实现)

目录 一、原理 1.1 水蒸气吸收衰减 1.2 二氧化碳的吸收衰减 1.3 大气的散射衰减 1.4 气象衰减 1.5 衰减后的红外辐射强度 二、C++实现 2.1 头文件 2.2 源文件 参考论文 一、原理 红外辐射在大气中传播的影响因素主要有3个: (1)大气中某些气体分子(H2O、CO2等)…

31214324

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…

4. 数据结构: 对象和数组

数字、布尔值和字符串是构建数据结构的原子。不过&#xff0c;许多类型的信息需要不止一个原子。对象允许我们对值&#xff08;包括其他对象&#xff09;进行分组&#xff0c;从而构建更复杂的结构。到目前为止&#xff0c;我们所构建的程序都受到限制&#xff0c;因为它们只能…

【Hadoop】【vim编辑器】【~/.bashrc 文件】如何编辑

1. 进入 vim 编辑器 在终端中输入以下命令&#xff1a; vim ~/.bashrc 2. 进入插入模式 打开文件后&#xff0c;你将处于普通模式。在普通模式下&#xff0c;你不能直接编辑文本。 要进入插入模式&#xff0c;请按下 i 键。这时&#xff0c;你应该会看到屏幕底部出现 -- 插…

Java | Leetcode Java题解之第437题路径总和III

题目&#xff1a; 题解&#xff1a; class Solution {public int pathSum(TreeNode root, int targetSum) {Map<Long, Integer> prefix new HashMap<Long, Integer>();prefix.put(0L, 1);return dfs(root, prefix, 0, targetSum);}public int dfs(TreeNode root,…

本地编译安装|编译安装最新版postgis3.4.3版本指南

一、本地编译安装步骤介绍 本地编译&#xff0c;指的是在本地环境编译安装某个软件&#xff0c;例如&#xff0c;本文所述的最新版postgis3.4.3&#xff0c;本地是什么cpu架构&#xff0c;编译完成后&#xff0c;编译产出物就可以在其它的同cpu架构的服务器上直接适用了&#…

828华为云征文|使用Flexus X实例集成ES搜索引擎

目录 一、应用场景 1.1 Flexus X实例概述 1.2 ES搜索引擎 二、安装相关服务 2.1 安装Elasticsearch7.17.0 2.2 安装kibana7.17.0 三、开通安全组规则 四、整体感受 4.1 Flexus X实例 4.2 使用感觉 一、应用场景 1.1 Flexus X实例概述 Flexus X实例是华为云推出的一款…

HAproxy,nginx实现七层负载均衡

环境准备&#xff1a; 192.168.88.25 &#xff08;client&#xff09; 192.168.88.26 &#xff08;HAproxy&#xff09; 192.168.88.27 &#xff08;web1&#xff09; 192.168.88.28 (web2) 192.168.88.29 &#xff08;php1&#xff09; 192.168.88.30…

计算机毕业设计公交站点线路查询网站登录注册搜索站点线路车次/springboot/javaWEB/J2EE/MYSQL数据库/vue前后分离小程序

选题背景‌&#xff1a; 随着城市化进程的加快&#xff0c;公共交通成为城市居民出行的重要方式。然而&#xff0c;传统的公交站点线路查询方式往往依赖于纸质地图或简单的电子显示屏&#xff0c;查询效率低下且信息更新不及时。因此&#xff0c;开发一个功能全面、易于使用的…

HTTP Status 404 - /brand-demo/selectAllServlet错误解决原因-Servlet/JavaWeb/IDEA

检查xml文件的包名有无错误检查html文件的url有无写错&#xff0c;是否与Servlet的urlPatterns一致检查Servlet的urlpattern有没有写错(如写成name),检查doPost、doGet是否正常运行 注&#xff1a;IDEA新建Servlet时&#xff0c;默认的WebServlet注解中name需要改urlPatterns&…

Python redis 安装和使用介绍

python redis安装和使用 一、Redis 安装1.1、Windows安装 二、安装 redis 模块二、使用redis 实例1.1、简单使用1.2、连接池1.3、redis 基本命令 String1.3.1、ex - 过期时间&#xff08;秒&#xff09;1.3.2、nx - 如果设置为True&#xff0c;则只有name不存在时&#xff0c;当…