Java网络通信-第21章

Java网络通信-第21章

1.网络程序设计基础

网络程序设计基础涵盖了许多方面,包括网络协议、Web开发、数据库连接、安全性等。

1.1局域网与互联网

局域网(LAN)与互联网(Internet)是两个不同的概念,它们分别用于描述不同范围内的网络连接。

  1. 局域网(LAN):
    • 定义: 局域网是指在一个相对较小的地理范围内连接在一起的计算机网络,如家庭、学校、办公室或公司。
    • 范围: 通常,局域网覆盖的范围限制在一个建筑物或者一组相邻的建筑物内。
    • 连接设备: 局域网内的设备可以通过局域网技术(如以太网、Wi-Fi等)相互通信,共享资源,比如打印机、文件等。
  2. 互联网(Internet):
    • 定义: 互联网是一个全球性的计算机网络,它连接了世界上的数以亿计的设备,允许它们之间进行通信和数据交换。
    • 范围: 互联网没有地理限制,覆盖全球范围。
    • 连接设备: 互联网连接了各种设备,包括个人计算机、智能手机、服务器等。它是通过一系列的互联网服务提供商(ISP)相互连接起来的。
  3. 关系:
    • 局域网是构建在较小的地理范围内,用于组织内部设备之间的通信。
    • 互联网是一个覆盖全球的网络,将不同地理位置的局域网连接起来,使得全球范围内的设备能够相互通信。
  4. 通信方式:
    • 局域网内部的通信通常更快、更可靠,而且通常不需要经过公共互联网。
    • 互联网通信需要经过公共的基础设施,如因特网服务提供商(ISP),数据在全球范围内传输。

1.2网络协议

网络协议是计算机网络中设备之间进行通信和数据交换的规则和约定。它们定义了数据的格式、传输方法、错误检测等方面的规范,确保不同厂商和不同类型的设备能够在网络中互相通信。

1.IP协议

IP(Internet Protocol)是计算机网络中的一种基础协议,用于在网络中传输数据包。IP协议定义了数据包的格式和规则,确保数据在网络中正确传递。目前广泛使用的IP版本有两个:IPv4(Internet Protocol version 4)和IPv6(Internet Protocol version 6)。

IPv4(Internet Protocol version 4):

  1. 地址格式: IPv4地址是32位的,通常以点分十进制表示,如192.168.0.1
  2. 地址空间: IPv4提供了大约42亿个唯一的地址,由于互联网的快速发展,IPv4地址空间已经不够用,导致IPv4地址枯竭问题。
  3. 子网: 为了更好地管理IP地址,IPv4引入了子网的概念,允许将一个大的IP地址块划分成多个小的子网。
  4. 私有地址范围: IPv4定义了一些私有地址范围,例如192.168.0.0/16,这些地址通常用于内部网络。

IPv6(Internet Protocol version 6):

  1. 地址格式: IPv6地址是128位的,通常以冒号分隔的十六进制表示,如2001:0db8:85a3:0000:0000:8a2e:0370:7334
  2. 地址空间: IPv6提供了远远超过IPv4的地址空间,理论上足够支持未来互联网的发展需求。
  3. 简化报头: IPv6在报头中做了一些简化,减少了一些字段,提高了路由和转发效率。
  4. 无需NAT: 由于IPv6地址空间足够大,通常无需使用网络地址转换(NAT)技术,简化了网络配置和管理。

共同点:

  1. 数据包传输: IPv4和IPv6都是网络层协议,负责将数据包从源主机传输到目标主机。
  2. 逐跳路由: 在网络中,数据包通过一系列的路由器逐跳传输,最终到达目标主机。

由于IPv4地址枯竭的问题,全球范围内正在逐渐过渡到IPv6。IPv6提供了更大的地址空间,更好的路由和转发效率,以及更简化的网络配置。在实际应用中,IPv4和IPv6可能同时存在,而且网络设备和应用程序需要同时支持这两种协议,这被称为双栈(Dual Stack)支持。

2.TCP与UDP协议

TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)是两种常见的传输层协议,它们定义了在计算机网络中数据如何被传输和接收的规则。以下是它们的主要特点和区别:

TCP(Transmission Control Protocol):

  1. 连接导向: TCP是面向连接的协议,建立了一条双向的通信路径,确保数据的可靠传输。
  2. 可靠性: TCP提供可靠的数据传输,通过使用确认机制和重传机制来确保数据的完整性和顺序性。
  3. 流控制: TCP通过流控制机制来控制数据的发送速率,防止接收方被过多的数据淹没。
  4. 拥塞控制: TCP使用拥塞控制算法,当网络拥塞时会调整发送速率,以避免网络的过载。
  5. 面向字节: TCP将数据视为一连串的字节流,而非独立的数据包。

UDP(User Datagram Protocol):

  1. 无连接: UDP是面向无连接的协议,通信双方在传输数据前不需要建立连接。
  2. 不可靠性: UDP不提供可靠的数据传输,不保证数据的完整性和顺序性,也不提供重传机制。
  3. 无流控制: UDP不提供流控制机制,因此发送方会一直以固定速率发送数据,而不会根据接收方的处理能力进行调整。
  4. 无拥塞控制: UDP不具备拥塞控制机制,因此在网络拥塞时可能会丢失数据包。
  5. 面向数据报: UDP将数据视为独立的数据包,而非字节流。

共同点:

  1. 端口: TCP和UDP都使用端口来标识应用程序,使得数据能够正确地交付到目标应用。
  2. 传输层协议: TCP和UDP都属于传输层协议,负责将数据从一个端点传输到另一个端点。

选择使用场景:

  • TCP适用于:
    • 需要可靠数据传输的应用,如文件传输、电子邮件等。
    • 需要确保数据按顺序到达的应用,如视频流、Web页面加载等。
  • UDP适用于:
    • 实时性要求较高,能够容忍一定程度的数据丢失的应用,如实时语音、视频通话等。
    • 需要较低的通信延迟,对数据可靠性要求不高的应用,如在线游戏。
3.端口与套接字

端口(Port)和套接字(Socket)是计算机网络中重要的概念,它们在网络通信中起到关键的作用。

端口(Port):

  • 定义: 端口是一个逻辑上的概念,用于标识一台计算机中运行的特定应用程序或服务。它允许一台计算机上的不同应用程序通过网络进行通信,每个应用程序都被分配一个唯一的端口号。
  • 范围: 端口号范围从0到65535,其中0到1023的端口号被称为「系统端口」或「知名端口」,它们通常用于一些常见的服务(如HTTP使用的80端口,FTP使用的21端口等)。1024到49151的端口号是「注册端口」,用于用户应用。49152到65535的端口号是「动态或私有端口」,它们用于动态分配,通常由客户端应用程序使用。

套接字(Socket):

  • 定义: 套接字是支持网络通信的编程接口,它允许进程通过网络发送和接收数据。套接字由IP地址和端口号组成,标识了通信中的两个端点。套接字可以用于在同一台计算机上的进程间通信,也可以用于在不同计算机之间进行网络通信。
  • 类型: 套接字可以分为两种类型:流套接字(Stream Socket)和数据报套接字(Datagram Socket)。
    • 流套接字: 提供面向连接的、可靠的、基于字节流的通信,使用TCP协议。
    • 数据报套接字: 提供无连接的、不可靠的、基于数据包的通信,使用UDP协议。

套接字编程通常包括创建套接字、绑定到一个特定的IP地址和端口号、监听连接请求(对于服务器端)、接受连接(对于服务器端)、连接到服务器(对于客户端)、发送和接收数据等步骤。

2.TCP程序

TCP(Transmission Control Protocol)是一种面向连接的、可靠的协议,常用于网络通信中。

2.1InetAddress类

InetAddress 类是 Java 中用于表示 IP 地址的类。它位于 java.net 包中,提供了一种在网络上标识主机的方法。InetAddress 类主要用于获取主机的 IP 地址和主机名。

以下是 InetAddress 类的一些主要方法和用法:

  1. 获取本地主机的 InetAddress 对象:

    InetAddress localHost = InetAddress.getLocalHost();
    
  2. 根据主机名获取 InetAddress 对象:

    String hostName = "example.com";
    InetAddress address = InetAddress.getByName(hostName);
    
  3. 获取主机的 IP 地址:

    byte[] ipAddress = address.getAddress(); // 返回字节数组形式的 IP 地址
    String ipAddressStr = address.getHostAddress(); // 返回字符串形式的 IP 地址
    
  4. 获取主机名:

    String hostName = address.getHostName();
    
  5. 判断是否是 IP 地址:

    boolean isIP = InetAddressUtils.isIPv4Address(ipAddressStr); // 可以使用 InetAddressUtils 类中的方法判断 IPv4 或 IPv6 地址
    

InetAddress 类的使用可以帮助我们进行网络编程中的主机信息获取和处理。请注意,它主要用于获取网络上的主机信息,而不涉及与网络通信的具体操作。如果需要进行网络通信,通常需要使用 SocketURL 等类。

2.2ServerSocket类

ServerSocket 类是 Java 中用于创建服务器套接字的类,它位于 java.net 包中。通过 ServerSocket,你可以监听特定端口,接受客户端的连接请求,并与客户端进行通信。以下是一些 ServerSocket 类的常见用法:

创建 ServerSocket 对象:

int port = 8080;
ServerSocket serverSocket = new ServerSocket(port);

接受客户端连接:

Socket clientSocket = serverSocket.accept();

这个方法会阻塞程序的执行,直到有客户端请求连接。一旦有连接请求,它会返回一个新的 Socket 对象,该对象用于与客户端进行通信。

获取输入输出流进行通信:

javaCopy codeInputStream inputStream = clientSocket.getInputStream();
OutputStream outputStream = clientSocket.getOutputStream();

使用这些流,你可以读取来自客户端的数据和向客户端发送数据。

关闭 ServerSocket:

javaCopy code
serverSocket.close();

当服务器不再需要监听新的连接时,可以关闭 ServerSocket

以下是一个简单的示例,演示了 ServerSocket 的基本用法:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class SimpleServer {
    public static void main(String[] args) {
        int port = 8080;

        try (ServerSocket serverSocket = new ServerSocket(port)) {
            System.out.println("Server is listening on port " + port);

            // 等待客户端连接
            Socket clientSocket = serverSocket.accept();
            System.out.println("Client connected");

            // 获取输入输出流
            InputStream inputStream = clientSocket.getInputStream();
            OutputStream outputStream = clientSocket.getOutputStream();

            // 读取客户端发送的数据
            byte[] buffer = new byte[1024];
            int bytesRead = inputStream.read(buffer);
            String clientMessage = new String(buffer, 0, bytesRead);
            System.out.println("Client message: " + clientMessage);

            // 向客户端发送响应
            String responseMessage = "Hello, client!";
            outputStream.write(responseMessage.getBytes());

            // 关闭连接
            clientSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

注意,这只是一个简单的例子,实际上,服务器通常需要在不同的线程中处理多个客户端连接,以避免阻塞。此外,网络编程涉及异常处理等更复杂的问题。

2.3TCP网络程序设计

设计 TCP 网络程序通常涉及两个主要角色:服务器端和客户端。TCP(传输控制协议)是一种面向连接的协议,它提供可靠的、有序的、基于字节流的双向数据传输。下面分别介绍服务器端和客户端的设计。

服务器端(TCP Server)

  1. 创建 ServerSocket 对象:

    ServerSocket serverSocket = new ServerSocket(port);
    
  2. 等待客户端连接:

    Socket clientSocket = serverSocket.accept();
    
  3. 获取输入输出流:

    InputStream inputStream = clientSocket.getInputStream();
    OutputStream outputStream = clientSocket.getOutputStream();
    
  4. 处理客户端发送的数据:

    // 读取数据
    byte[] buffer = new byte[1024];
    int bytesRead = inputStream.read(buffer);
    String clientMessage = new String(buffer, 0, bytesRead);
    
    // 处理数据,执行业务逻辑
    
    // 发送响应
    String responseMessage = "Hello, client!";
    outputStream.write(responseMessage.getBytes());
    
  5. 关闭连接:

    clientSocket.close();
    
  6. 异常处理: 在实际应用中,需要添加适当的异常处理,以确保程序在发生异常时能够正确地处理和关闭资源。

客户端(TCP Client)

  1. 创建 Socket 对象连接服务器:

    Socket socket = new Socket(serverAddress, serverPort);
    
  2. 获取输入输出流:

    InputStream inputStream = socket.getInputStream();
    OutputStream outputStream = socket.getOutputStream();
    
  3. 发送数据给服务器:

    // 发送数据
    String message = "Hello, server!";
    outputStream.write(message.getBytes());
    
  4. 接收服务器响应:

    // 接收数据
    byte[] buffer = new byte[1024];
    int bytesRead = inputStream.read(buffer);
    String serverResponse = new String(buffer, 0, bytesRead);
    System.out.println("Server response: " + serverResponse);
    
  5. 关闭连接:

    socket.close();
    
  6. 异常处理: 同样,需要适当地处理可能出现的异常。

示例

以下是一个简单的示例,演示了一个简单的 TCP 服务器和客户端:

TCP Server:

import java.io.*;
import java.net.*;

public class TCPServer {
    public static void main(String[] args) {
        int port = 8080;

        try (ServerSocket serverSocket = new ServerSocket(port)) {
            System.out.println("Server is listening on port " + port);

            Socket clientSocket = serverSocket.accept();
            System.out.println("Client connected");

            InputStream inputStream = clientSocket.getInputStream();
            OutputStream outputStream = clientSocket.getOutputStream();

            byte[] buffer = new byte[1024];
            int bytesRead = inputStream.read(buffer);
            String clientMessage = new String(buffer, 0, bytesRead);
            System.out.println("Client message: " + clientMessage);

            String responseMessage = "Hello, client!";
            outputStream.write(responseMessage.getBytes());

            clientSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

TCP Client:

import java.io.*;
import java.net.*;

public class TCPClient {
    public static void main(String[] args) {
        String serverAddress = "localhost";
        int serverPort = 8080;

        try (Socket socket = new Socket(serverAddress, serverPort)) {
            InputStream inputStream = socket.getInputStream();
            OutputStream outputStream = socket.getOutputStream();

            String message = "Hello, server!";
            outputStream.write(message.getBytes());

            byte[] buffer = new byte[1024];
            int bytesRead = inputStream.read(buffer);
            String serverResponse = new String(buffer, 0, bytesRead);
            System.out.println("Server response: " + serverResponse);

            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

这只是一个简单的例子,实际上,我们可能需要在不同的线程中处理多个客户端连接,以及添加更复杂的业务逻辑和异常处理。

运行结果

TCP Server:

在这里插入图片描述

TCP Client:

在这里插入图片描述

3.UDP程序

UDP(User Datagram Protocol)是一种无连接、不可靠、简单的面向数据报的协议。UDP 提供了一种轻量级的数据传输机制,适用于一些对实时性要求较高、容忍数据丢失的应用场景。

3.1DatagramPacket类

DatagramPacket 类是 Java 中用于表示数据报包的类,通常用于 UDP 协议的通信。DatagramPacket 封装了数据和目标主机信息,包括目标主机的 IP 地址和端口号。这类被用于在网络上发送和接收数据报。

构造方法:

  1. 发送数据时的构造方法:

    DatagramPacket(byte[] data, int length, InetAddress address, int port)
    
    • data:要发送的数据,以字节数组形式提供。
    • length:要发送的数据的长度。
    • address:目标主机的 IP 地址。
    • port:目标主机的端口号。
  2. 接收数据时的构造方法:

    javaCopy code
    DatagramPacket(byte[] data, int length)
    
    • data:用于接收数据的字节数组。
    • length:接收数据的最大长度。

常用方法:

  1. 获取数据:

    byte[] getData()
    
  2. 获取数据长度:

    int getLength()
    
  3. 获取数据报包的源地址:

    InetAddress getAddress()
    
  4. 获取数据报包的源端口号:

    int getPort()
    
  5. 设置数据报包的目标地址和端口号:

    setAddress(InetAddress address)
    setPort(int port)
    

3.2DatagramSocket类

DatagramSocket 类是 Java 中用于进行 UDP(User Datagram Protocol)通信的套接字类。它提供了在网络上发送和接收数据报(DatagramPacket)的方法。与 TCP 不同,UDP 是一种无连接、不可靠的协议,但它更加轻量且适用于一些实时性要求较高的应用场景。

构造方法:

  1. 创建 DatagramSocket 实例:

    javaCopy code
    DatagramSocket socket = new DatagramSocket();
    

    创建一个新的 DatagramSocket 实例,用于与其他主机进行 UDP 通信。

  2. 指定端口号创建 DatagramSocket:

    DatagramSocket socket = new DatagramSocket(port);
    

    创建一个监听指定端口的 DatagramSocket 实例,用于接收数据。

  3. 指定本地地址和端口创建 DatagramSocket:

    DatagramSocket socket = new DatagramSocket(port, InetAddress.getLocalHost());
    

    创建一个绑定到指定本地地址和端口的 DatagramSocket 实例。

常用方法:

  1. 发送数据报:

    send(DatagramPacket packet)
    

    通过 DatagramSocket 发送数据报。

  2. 接收数据报:

    receive(DatagramPacket packet)
    

    通过 DatagramSocket 接收数据报。

  3. 设置超时时间:

    setSoTimeout(int timeout)
    

    设置 DatagramSocket 的超时时间,用于控制在接收时等待数据的最长时间。

  4. 关闭 DatagramSocket:

    close()
    

    关闭 DatagramSocket,释放相关资源。

3.3UDP网络序设计

设计 UDP(User Datagram Protocol)网络程序通常涉及两个主要角色:服务器端和客户端。UDP 是一种无连接、不可靠的协议,适用于对实时性要求较高、能够容忍一定数据丢失的应用场景。以下是 UDP 服务器端和客户端的基本设计步骤:

UDP 服务器端设计:

  1. 创建 DatagramSocket 对象:

    DatagramSocket serverSocket = new DatagramSocket(port);
    

    创建一个 DatagramSocket 实例来监听指定端口。

  2. 创建 DatagramPacket 对象用于接收数据:

    byte[] receiveData = new byte[1024];
    DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
    

    用于接收从客户端发送过来的数据。

  3. 接收客户端数据:

    serverSocket.receive(receivePacket);
    

    通过 DatagramSocket 接收数据报。

  4. 处理客户端数据:

    String clientMessage = new String(receivePacket.getData(), 0, receivePacket.getLength());
    // 处理客户端数据...
    

    处理接收到的客户端数据,执行相应的业务逻辑。

  5. 发送响应给客户端(可选):

    InetAddress clientAddress = receivePacket.getAddress();
    int clientPort = receivePacket.getPort();
    String responseMessage = "Hello, client!";
    byte[] sendData = responseMessage.getBytes();
    DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, clientAddress, clientPort);
    serverSocket.send(sendPacket);
    

    如果需要,可以通过 DatagramSocket 发送响应给客户端。

  6. 关闭 DatagramSocket:

    serverSocket.close();
    

    在不再需要监听时关闭 DatagramSocket

UDP 客户端设计:

  1. 创建 DatagramSocket 对象:

    DatagramSocket clientSocket = new DatagramSocket();
    

    创建一个 DatagramSocket 实例,用于发送和接收数据。

  2. 创建 DatagramPacket 对象用于发送数据:

    String message = "Hello, server!";
    byte[] sendData = message.getBytes();
    InetAddress serverAddress = InetAddress.getByName(serverHost);
    int serverPort = 9876; // 服务器端口号
    DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverAddress, serverPort);
    

    用于将数据发送给服务器。

  3. 发送数据给服务器:

    clientSocket.send(sendPacket);
    

    通过 DatagramSocket 发送数据报给服务器。

  4. 创建 DatagramPacket 对象用于接收服务器响应:

    byte[] receiveData = new byte[1024];
    DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
    

    用于接收从服务器返回的数据。

  5. 接收服务器响应:

    clientSocket.receive(receivePacket);
    String serverResponse = new String(receivePacket.getData(), 0, receivePacket.getLength());
    System.out.println("Server response: " + serverResponse);
    

    通过 DatagramSocket 接收服务器的响应。

  6. 关闭 DatagramSocket:

    clientSocket.close();
    

    在不再需要发送和接收数据时关闭 DatagramSocket

示例:

以下是一个简单的 UDP 服务器端和客户端的示例:

UDP Server:

import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UDPServer {
    public static void main(String[] args) {
        int port = 9876;

        try (DatagramSocket serverSocket = new DatagramSocket(port)) {
            System.out.println("Server is listening on port " + port);

            byte[] receiveData = new byte[1024];
            DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);

            serverSocket.receive(receivePacket);

            String clientMessage = new String(receivePacket.getData(), 0, receivePacket.getLength());
            System.out.println("Client message: " + clientMessage);

            // 处理客户端数据...
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

UDP Client:

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UDPClient {
    public static void main(String[] args) {
        String serverHost = "localhost";
        int serverPort = 9876;

        try (DatagramSocket clientSocket = new DatagramSocket()) {
            String message = "Hello, server!";
            byte[] sendData = message.getBytes();
            InetAddress serverAddress = InetAddress.getByName(serverHost);

            DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverAddress, serverPort);
            clientSocket.send(sendPacket);

            byte[] receiveData = new byte[1024];
            DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
            clientSocket.receive(receivePacket);

            String serverResponse = new String(receivePacket.getData(), 0, receivePacket.getLength());
            System.out.println("Server response: " + serverResponse);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在实际应用中,需要注意异常处理、超时机制、数据的序列化和反序列化等方面,以确保程序的稳定性和可靠性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

咸鱼开店的经验分享

项目特点 1.无需囤货、积货、压货; 2.开店0门槛,有淘宝号即可,无需繁琐的开店流程; 3.免收店铺押金、保证金、平台佣金; 4.平台自带流量,无需砸钱推广。 准备的账号 1.不在于多,而在于精。…

CPU、MCU、MPU、DSP、FPGA各是什么?有什么区别?

1、CPU 中央处理器,简称 CPU(Central Processing Unit),中央处理器主要包括两个部分,即控制器、运算器,其中还包括高速缓冲存储器及实现它们之间联系的数据、控制的总线。 电子计算机三大核心部件就是CPU…

使用Postman进行自动化集成测试

1 前言 笔者在使用Node开发HTTP接口的过程中,发现当接口数量越来越多,且接口之间互相依赖时,接口测试流程就会变得十分繁琐,且容易出错。那如何才能高效且全面地对接口进行测试呢? 通过实践,笔者发现可以…

激光雷达标定板提高扫地机器人感知环境能力和清洁效率

智能扫地机器人的激光雷达标定板是一种用于校准激光雷达的设备,它通常由不同反射率的涂料涂覆在板面上,用于接收激光雷达发出的激光束并将其反射回来,从而帮助校准激光雷达的测量参数。在自动驾驶和机器人领域,激光雷达和相机的联…

什么是Redis数据库,如何在 CentOS 7 上安装 Redis,看完你就懂了

目录 一、Redis简介 二、Redis特点 三、数据类型 四、Redis应用场景 五、Centos环境部署Redis 六、常见参数整理 一、Redis简介 Redis ,是一个高性能(NOSQL)的key-value数据库,Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型…

Java 使用oshi获取当前服务器状态cpu、内存、存储等核心信息

文章目录 简介相关资料maven依赖oshi-官方示例获取CUP信息代码获取内存信息获取磁盘信息 简介 OSHI 是基于 JNA 的(本地)操作系统和硬件信息库。它不需要安装任何其他额外的本地库,旨在提供一种跨平台的实现来检索系统信息,例如操…

C++_引用

目录 1、引用的使用 1.1 对“别名”的修改 1.2 “别名”的“别名” 1.3 对“别名”进行赋值 2、引用的意义 2.1 指针的“别名” 3、函数返回值作为引用 3.1 返回值作为引用的意义 4、引用的权限 4.1 引用的类型转换 5、指针与引用 5.1 指针与引用的相似处 5.2 指…

FPGA时序分析与约束(0)——目录与传送门

一、简介 关于时序分析和约束的学习似乎是学习FPGA的一道分水岭,似乎只有理解了时序约束才能算是真正入门了FPGA,对于FPGA从业者或者未来想要从事FPGA开发的工程师来说,时序约束可以说是一道躲不过去的坎,所以这个系列我们会详细介…

使用selenium的edge浏览器登录某为

互联网上基本都是某哥的用法,其实edge和某哥的用法是一样的就有一下参数不一样。 一、运行环境 Python:3.7 Selenium:4.11.2 Edge:版本 120.0.2210.61 (正式版本) (64 位) 二、执行代码 from time import sleepfrom selenium…

如何赢得并留住订阅者:12 个必须尝试的订阅营销策略

Netflix、Hubspot、Spotify 和 Slack 都是流行的基于订阅的服务,您可能每天都会使用它们,无论是工作还是娱乐。这些例子表明,订阅业务模式深受 SaaS 创业者的青睐。 这种模式的吸引力很容易理解,特别是考虑到订阅市场预计到 2025…

Node包管理工具 - nvm、npm、yarn、cnpm、pnpm

转载说明 原文地址 简介 nvm : 可以实现一台电脑,拥有多个版本的Node npm : node package manager 下载Node后自带的一个包管理工具 yarn : npm 的升级版,更优秀 cnpm : 配置下载非官方地址的依赖(淘宝、华为、腾讯镜像) pnpm :…

智能优化算法应用:基于蜣螂算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于蜣螂算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于蜣螂算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.蜣螂算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

数据中心:保障企业运营安全可靠的关键

随着人工智能与云计算的爆发,数据中心行业迎来了前所未有的需求增长。然而,这也带来了一系列的挑战。各地政府机构对数据中心建设出台了更为完善和严格的地方标准,企业面临着运营成本高、人才短缺和节能减排等困难。同时,过去频频…

redis 三主三从高可用集群docker swarm

由于数据量过大,单个Master复制集难以承担,因此需要对多个复制集进行集群,形成水平扩展每个复制集只负责存储整个数据集的一部分,这就是Redis的集群,其作用是提供在多个Redis节点间共享数据的程序集。 官网介绍地址 re…

理解基于 Hadoop 生态的大数据技术架构

转眼间,一年又悄然而逝,时光荏苒,岁月如梭。当回首这段光阴,不禁感叹时间的匆匆,仿佛只是一个眨眼的瞬间,一年的旅程已成为过去,而如今又到了画饼的时刻了 ! 基于 Hadoop 生态的大数…

msvcp100.dll丢失的常见原因/msvcp100.dll丢失的解决方法分享

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“msvcp100.dll丢失”。这个错误提示通常出现在运行某些程序或游戏时,给使用者带来了很大的困扰。那么,究竟是什么原因导致了msvcp100.dll文件的丢失呢?本…

【Fastadmin】利用 build_select 做一个树状下拉选择框

1.效果展示 系统crud生成的下拉分类有些不是很好看,并且选择困难,看不出级差,效果如下: 经过 build_select 加工后的效果,美观好看,并添加上搜索功能: 2. 首先需要写一个树状图的数据格式 protected $datalist []; pu…

集合贴——问答引擎

1.FAQ问答引擎 FAQ问答引擎是一种传统的问答机器人引擎,它基于NLP算法研发,为用户提供高泛化性、灵活拓展的QA对匹配引擎。FAQ通常以{1条标准问 1 条标准答案 n条相似问}的结构将语料存储在FAQ语料库中(如mysql、ElasticSearch&#xff09…

# K近邻算法 度量距离

K近邻算法 度量距离 欧氏距离(Euclidean distance) 欧几里得度量(euclidean metric)(也称欧氏距离)是一个通常采用的距离定义,指在 m m m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)。在二维和三维空间中的欧氏距离就是两点…

电商平台商品销量API接口,30天销量API接口接口超详细接入方案说明

电商平台商品销量API接口的作用主要是帮助开发者获取电商平台上的商品销量信息。通过这个接口,开发者可以在自己的应用或网站中实时获取商品的销量数据,以便进行销售分析、库存管理、市场预测等操作。 具体来说,电商平台商品销量API接口的使…