使用Python进行Socket接口测试

        大家好,在现代软件开发中,网络通信是不可或缺的一部分。无论是传输数据、获取信息还是实现实时通讯,都离不开可靠的网络连接和有效的数据交换机制。而在网络编程的基础中,Socket(套接字)技术扮演了重要角色。

        Socket 允许计算机上的程序通过网络进行通信,它是网络通信的基础。Python 提供了强大且易于使用的 socket 模块,使开发者能够轻松地创建客户端和服务器应用,实现数据传输和交互。

        本文将深入探讨如何利用 Python 编程语言来进行 Socket 接口测试。我们将从基础概念开始介绍,逐步引导大家掌握创建、测试和优化 socket 接口的关键技能。希望本文可以给大家的工作带来一些帮助~

一、引言

简要介绍 socket 编程的重要性和应用场景:

        Socket 编程是计算机网络编程中的基础技术之一,它允许不同计算机之间通过网络进行通信和数据交换。通过 socket,开发者可以实现客户端和服务器之间的数据传输,从简单的消息传递到复杂的实时数据流都可以使用 socket 技术来实现。

        在现代软件开发中,无论是在 Web 开发、移动应用、云计算还是物联网等领域,socket 编程都扮演着重要角色。以下是一些常见的应用场景:

  • 网络通信:例如浏览器与服务器之间的 HTTP 请求、邮件传输等都依赖于 socket 编程。
  • 实时数据传输:如即时通讯应用、在线游戏中的实时状态更新等。
  • 分布式系统:各个节点之间的通信,例如分布式数据库、分布式计算等。
  • 设备控制与监控:物联网中各种设备之间的数据交换和控制。
  • 测试和仿真:在软件开发中,测试 socket 接口的正确性和性能是确保系统稳定运行的关键部分。
概述本文将要讨论的内容和目标:

本文旨在介绍如何使用 Python 编程语言来测试 socket 接口。我们将深入探讨以下主题:

  • Python 中的 socket 编程基础,包括创建 socket 对象、绑定地址和端口、发送和接收数据等基本操作。
  • 如何编写有效的 socket 测试用例,以确保接口功能和性能的稳定性。
  • 演示一个实际的客户端-服务器应用,展示如何使用自动化测试方法来验证 socket 接口的正确性。
  • 讨论一些高级主题,如异常处理、安全性和性能测试,以及多线程或异步 socket 编程的测试技巧。

        通过本文,读者将能够掌握使用 Python 进行 socket 接口测试的基本技能,为他们在日常开发和项目实施中提供实用的工具和方法。

二、Socket 简介

什么是 socket?

        在计算机网络编程中,socket(套接字)是一个抽象层,用于描述网络上的两个应用程序之间的通信链路。它允许程序员通过网络发送和接收数据,就像两个程序之间通过文件系统进行数据交换一样。socket 提供了一种统一的接口,使得不同操作系统上的应用程序可以进行网络通信,而无需关心底层网络细节。

socket 在网络编程中的角色和作用:

        Socket 主要用于实现客户端和服务器之间的通信。它可以用来建立连接、传输数据,并且支持多种不同的传输协议(如TCP、UDP等),从而适应不同的网络通信需求。在网络编程中,socket 扮演了以下几个重要角色:

  • 连接建立和维护:通过 socket,客户端和服务器可以建立稳定的连接,进行长期的数据交换。
  • 数据传输:socket 提供了发送和接收数据的方法,允许应用程序之间在网络上传输信息。
  • 网络协议支持:不同类型的 socket 可以支持多种传输协议,例如 TCP 和 UDP,从而满足不同的数据传输需求。
  • 跨平台兼容性:socket 提供了一种统一的编程接口,使得无论是在 Windows、Linux 还是其他操作系统上,开发者都可以使用相同的方法来实现网络通信。
常见的 socket 类型和用途:

在 socket 编程中,常见的几种 socket 类型包括:

  • 流式 socket(TCP socket):基于 TCP 协议,提供面向连接的可靠数据流传输。它适用于需要确保数据完整性和顺序性的应用,如 HTTP、FTP 等。

  • 数据报式 socket(UDP socket):基于 UDP 协议,提供不可靠的数据报传输。它适用于对数据传输时延要求较低的应用,如实时音视频传输、在线游戏中的实时通讯等。

  • 原始 socket:允许程序直接访问底层网络协议,用于实现特定的网络功能和高级网络安全性需求,如网络包嗅探、防火墙等。

常见的 socket 应用场景包括但不限于:

  • Web 服务器和客户端通信:浏览器通过 TCP socket 与 Web 服务器进行 HTTP 通信,获取网页内容。

  • 即时通讯应用:使用 UDP socket 实现实时消息传输,如即时聊天、视频会议等。

  • 远程数据获取和处理:通过 socket 连接远程设备,获取实时数据并进行处理,如物联网设备数据采集与监控。

  • 分布式系统通信:各个分布式系统节点之间的数据交换和同步,通过 socket 实现节点间的通信。

        总之,socket 是网络编程中不可或缺的技术基础,它提供了灵活、高效的数据传输机制,支持多种应用场景和需求,是现代软件开发中必要的工具之一。

三、Python 中的 Socket 编程

Python 中的 socket 模块简介

        Python 提供了一个内置的 socket 模块,使得开发者可以轻松地进行网络通信。这个模块实现了许多与网络相关的函数和类,使得创建客户端和服务器应用程序变得简单和直观。

创建 socket 对象

        在 Python 中,使用 socket 模块创建一个 socket 对象非常简单。可以根据需要选择创建 TCP socket 还是 UDP socket。下面是一个简单的例子,展示如何创建一个 TCP socket 客户端:

import socket

# 创建 TCP socket 对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

在这个例子中,socket.socket() 函数接受两个参数:

  • socket.AF_INET 表示使用 IPv4 地址族。
  • socket.SOCK_STREAM 表示创建一个 TCP socket。如果要创建 UDP socket,可以使用 socket.SOCK_DGRAM
绑定 socket 到地址和端口

        在服务器端,需要将 socket 绑定到特定的地址(通常是主机的 IP 地址)和端口上,以便客户端可以连接到服务器。下面是一个示例展示如何在服务器端创建一个 TCP socket 并绑定到地址和端口:

import socket

# 创建 TCP socket 对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定到地址和端口
server_address = ('localhost', 8888)  # 使用本地地址和端口8888
server_socket.bind(server_address)

        在这个例子中,server_socket.bind() 方法将服务器 socket 绑定到 localhost 地址和 8888 端口上。

发送和接收数据

        一旦建立了连接,客户端和服务器就可以通过 socket 对象发送和接收数据。下面是一个简单的示例展示如何在客户端和服务器之间进行数据交换:

服务器端代码:
import socket

# 创建 TCP socket 对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定到地址和端口
server_address = ('localhost', 8888)
server_socket.bind(server_address)

# 监听连接
server_socket.listen(1)

print("等待客户端连接...")
connection, client_address = server_socket.accept()

try:
    print(f"连接来自 {client_address}")
    
    # 接收数据
    data = connection.recv(1024)
    print(f"收到来自客户端的数据:{data.decode()}")

    # 发送数据
    message = "Hello, client!"
    connection.sendall(message.encode())
finally:
    # 关闭连接
    connection.close()
    server_socket.close()

客户端代码:

import socket

# 创建 TCP socket 对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接服务器
server_address = ('localhost', 8888)
client_socket.connect(server_address)

try:
    # 发送数据
    message = "Hello, server!"
    client_socket.sendall(message.encode())

    # 接收数据
    data = client_socket.recv(1024)
    print(f"收到来自服务器的数据:{data.decode()}")
finally:
    # 关闭连接
    client_socket.close()

        在这个例子中,客户端和服务器通过 socket.sendall() 方法发送数据,并通过 socket.recv() 方法接收数据。数据的传输是基于 TCP 的,确保了数据的完整性和顺序性。

四、编写 Socket 测试用例

使用 Python 的 unittest 或其他测试框架

        在 Python 中,可以使用标准库中的 unittest 模块来编写和运行测试用例。unittest 提供了一种结构化的方式来组织测试,并提供丰富的断言方法来验证预期行为。除了 unittest,还有其他测试框架如 pytest,它们也能很好地支持 socket 测试。

设计测试用例的结构和目标

        良好的测试用例应该覆盖各种情况,包括正常情况和异常情况,以确保 socket 接口的稳定性和正确性。以下是设计 socket 测试用例时的一些结构和目标:

  1. 连接测试

    • 确认服务器可以正确建立和接受客户端连接。
    • 确保客户端能够成功连接到服务器。
  2. 数据发送和接收测试

    • 确保服务器能够接收并正确处理来自客户端的数据。
    • 确保客户端能够成功发送数据并接收到服务器的响应。
  3. 异常情况测试

    • 测试在不同网络条件下的连接超时或断开处理。
    • 测试非法数据或格式错误时的处理。
  4. 性能测试(可选):

    • 测试在大数据量传输时的性能表现,如吞吐量和延迟。
示例:连接测试、数据发送和接收测试等

        下面是一个简单的示例,展示如何使用 unittest 编写 socket 测试用例。这个示例包括连接测试和数据发送接收测试。

import unittest
import socket
import threading

class TestSocket(unittest.TestCase):
    
    def setUp(self):
        # 启动一个简单的服务器
        self.server_thread = threading.Thread(target=self.run_server)
        self.server_thread.start()
    
    def tearDown(self):
        # 关闭服务器
        self.server_socket.close()
        self.server_thread.join()
    
    def run_server(self):
        self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        server_address = ('localhost', 8888)
        self.server_socket.bind(server_address)
        self.server_socket.listen(1)
        
        self.conn, self.client_address = self.server_socket.accept()
        
    def test_connection(self):
        # 测试连接是否成功
        client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        client_socket.connect(('localhost', 8888))
        client_socket.close()
    
    def test_send_receive(self):
        # 测试数据发送和接收
        message = "Hello, server!"
        client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        client_socket.connect(('localhost', 8888))
        client_socket.sendall(message.encode())
        
        received_data = self.conn.recv(1024)
        self.assertEqual(received_data.decode(), message)
        
        client_socket.close()

if __name__ == '__main__':
    unittest.main()

在这个示例中:

  • setUp() 方法用于启动一个简单的服务器,并在 tearDown() 方法中关闭服务器。
  • run_server() 方法创建服务器 socket 并绑定到 localhost:8888,等待客户端连接。
  • test_connection() 方法测试客户端是否能成功连接到服务器。
  • test_send_receive() 方法测试客户端发送数据给服务器并接收服务器的响应。

        通过这些测试用例,可以验证服务器和客户端在正常情况下的基本连接、数据发送和接收功能。可以根据具体的需求进一步扩展和优化这些测试用例,确保覆盖更多的场景和边界条件,以提高测试的全面性和可靠性。

五、实际案例演示

        在这部分,我们将演示一个简单的客户端-服务器应用,并展示如何编写测试用例来测试该应用的 socket 接口。重点将介绍如何模拟客户端和服务器,进行单元测试和集成测试。

1. 简单的客户端-服务器应用

        我们将创建一个简单的客户端-服务器应用,客户端向服务器发送消息,服务器接收并回复消息。以下是服务器端和客户端的实现:

服务器端代码 (server.py):
import socket

def start_server():
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_address = ('localhost', 8888)
    server_socket.bind(server_address)
    server_socket.listen(1)
    
    print(f"服务器启动,监听地址:{server_address}")
    
    while True:
        conn, client_address = server_socket.accept()
        print(f"客户端 {client_address} 连接成功!")
        
        try:
            while True:
                data = conn.recv(1024)
                if data:
                    print(f"收到来自客户端的消息:{data.decode()}")
                    conn.sendall(b"消息已收到")
                else:
                    break
        finally:
            conn.close()

if __name__ == "__main__":
    start_server()

客户端代码 (client.py):

import socket

def start_client(message):
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_address = ('localhost', 8888)
    client_socket.connect(server_address)
    
    try:
        # 发送消息
        client_socket.sendall(message.encode())
        
        # 接收服务器回复
        data = client_socket.recv(1024)
        print(f"收到服务器的回复:{data.decode()}")
    finally:
        client_socket.close()

if __name__ == "__main__":
    message = "Hello, server!"
    start_client(message)
2. 编写测试用例来测试 socket 接口

        接下来,我们将编写测试用例来测试这个简单的客户端-服务器应用的 socket 接口。我们将使用 unittest 模块来组织和运行测试。

测试用例代码 (test_socket_app.py):
import unittest
import socket
import threading
import time
from client import start_client
from server import start_server

class TestSocketApp(unittest.TestCase):
    
    @classmethod
    def setUpClass(cls):
        cls.server_thread = threading.Thread(target=start_server)
        cls.server_thread.start()
        # 等待服务器启动
        time.sleep(1)
    
    @classmethod
    def tearDownClass(cls):
        # 关闭服务器
        client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        server_address = ('localhost', 8888)
        client_socket.connect(server_address)
        client_socket.close()
        cls.server_thread.join()
    
    def test_client_server_communication(self):
        message = "Hello, server!"
        start_client(message)
    
    def test_server_response(self):
        client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        server_address = ('localhost', 8888)
        client_socket.connect(server_address)
        
        try:
            # 发送消息
            message = "Ping!"
            client_socket.sendall(message.encode())
            
            # 接收服务器回复
            data = client_socket.recv(1024)
            self.assertEqual(data.decode(), "消息已收到")
        finally:
            client_socket.close()

if __name__ == '__main__':
    unittest.main()

3. 如何模拟客户端和服务器,进行单元测试和集成测试

在上面的示例中,我们通过以下方式模拟客户端和服务器进行测试:

  • 服务器启动和关闭

    • 在测试用例的 setUpClass() 方法中,启动一个独立的线程运行服务器。这样可以在单元测试中独立运行服务器,并在 tearDownClass() 方法中关闭服务器。
  • 客户端与服务器通信测试

    • test_client_server_communication() 方法测试客户端能否成功向服务器发送消息,并接收到服务器的回复。
  • 服务器响应测试

    • test_server_response() 方法测试客户端发送消息后,服务器能否正确接收并回复消息。

        通过这种方式,我们可以确保客户端和服务器在正常和异常情况下的基本通信功能。在实际应用中,可以进一步扩展测试用例,包括异常处理、性能测试等,以确保整个应用的稳定性和可靠性。

        这种测试方法不仅适用于简单的客户端-服务器应用,也可以扩展应用到更复杂的网络应用程序中,帮助开发者及时发现和修复潜在的网络通信问题。

六、高级主题

        在这部分,我们将详细介绍异常处理和错误场景的测试、安全性和性能测试的考虑,以及多线程或异步 socket 编程的测试方法。这些主题将帮助大家更全面地理解和实施高级的 socket 编程测试策略。

1. 异常处理和错误场景的测试

        在 socket 编程中,异常处理是至关重要的,因为网络通信可能面临各种不可预测的问题,如连接超时、数据丢失、网络中断等。测试时,需要确保程序能够正确地处理这些异常情况,并能够恢复到一个稳定的状态。

示例:

下面是一个简单的例子,展示如何测试服务器端处理客户端连接中断的情况:

import unittest
import socket
import threading
import time
from client import start_client
from server import start_server

class TestSocketExceptionHandling(unittest.TestCase):
    
    @classmethod
    def setUpClass(cls):
        cls.server_thread = threading.Thread(target=start_server)
        cls.server_thread.start()
        # 等待服务器启动
        time.sleep(1)
    
    @classmethod
    def tearDownClass(cls):
        # 关闭服务器
        client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        server_address = ('localhost', 8888)
        client_socket.connect(server_address)
        client_socket.close()
        cls.server_thread.join()
    
    def test_client_disconnect_handling(self):
        # 测试客户端断开连接时,服务器的处理
        client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        server_address = ('localhost', 8888)
        client_socket.connect(server_address)
        
        # 关闭客户端连接
        client_socket.close()
        
        # 等待一段时间以确保服务器处理断开连接
        time.sleep(1)
        
        # 尝试重新连接
        try:
            client_socket.connect(server_address)
        except ConnectionRefusedError:
            # 服务器应该拒绝连接
            pass
        else:
            self.fail("服务器未正确处理客户端断开连接情况")
        finally:
            client_socket.close()

if __name__ == '__main__':
    unittest.main()

        在这个测试用例中,我们模拟了客户端断开连接的情况,并验证服务器是否正确地拒绝了重新连接请求。这种方式可以确保服务器在异常情况下的行为符合预期。

2. 安全性和性能测试考虑

        安全性和性能是网络应用程序中另外两个重要的方面。安全性测试确保数据在传输过程中的保密性和完整性,而性能测试则评估系统在负载和高并发条件下的表现。

  • 安全性测试

    • 使用加密算法(如TLS/SSL)保护数据传输的安全性。
    • 防止常见的网络攻击,如拒绝服务(DDoS)攻击。
    • 定期审计和更新安全策略,确保网络通信的安全性。
  • 性能测试

    • 测试在不同负载条件下的响应时间和吞吐量。
    • 模拟大数据量的传输,评估系统的处理能力。
    • 使用性能监控工具(如Apache JMeter、Gatling等)进行压力测试和性能分析。
3. 多线程或异步 socket 编程的测试方法

        在现代应用程序中,多线程或异步编程模型常用于提高系统的并发能力和性能。在这种情况下,需要特别关注如何有效地测试并发场景下的 socket 接口。

示例:

下面是一个简单的示例,演示如何使用 asyncio 模块进行异步 socket 编程的测试:

import asyncio
import unittest
import socket
from client_async import start_client_async
from server_async import start_server_async

class TestAsyncSocket(unittest.TestCase):
    
    @classmethod
    def setUpClass(cls):
        cls.loop = asyncio.new_event_loop()
        asyncio.set_event_loop(cls.loop)
        cls.server = cls.loop.run_until_complete(start_server_async())
    
    @classmethod
    def tearDownClass(cls):
        cls.server.close()
        cls.loop.run_until_complete(cls.server.wait_closed())
        cls.loop.close()
    
    def test_async_client_server_communication(self):
        message = "Hello, server!"
        result = self.loop.run_until_complete(start_client_async(message))
        self.assertEqual(result, "消息已收到")

if __name__ == '__main__':
    unittest.main()

在这个示例中:

  • 使用 asyncio 创建了异步的客户端和服务器实现 (client_async.pyserver_async.py)。
  • TestAsyncSocket 类中的 setUpClass() 方法启动了异步服务器,并在 tearDownClass() 方法中关闭服务器。
  • test_async_client_server_communication() 方法测试了异步客户端向服务器发送消息并接收响应的功能。

        通过这种方式,可以有效地测试多线程或异步环境下的 socket 接口,并确保系统在高并发和异步操作下的稳定性和正确性。

        总结来说,异常处理、安全性和性能测试以及多线程或异步 socket 编程的测试方法是确保网络应用程序质量和稳定性的关键步骤。在设计和实施测试策略时,需要根据具体的应用场景和需求选择合适的测试方法和工具,以达到最佳的测试覆盖和效果。

七、注意事项

        在进行 Socket 编程以及编写相关测试用例时,有几个重要的注意事项需要特别关注。以下将详细介绍这些注意事项,确保示例代码和测试用例能够完整运行并展示预期的结果。

1. 清晰的语言和示意图帮助理解

在编写示例代码和测试用例时,使用清晰简洁的语言是非常重要的。确保每一步操作和每个函数的作用都能清晰地表达出来,避免使用过于复杂的代码结构或术语,以免读者难以理解和理解示例代码的意图。

示意图的使用也能极大地帮助读者理解网络通信的流程和数据传输的路径。例如,可以绘制简单的时序图或数据流图来说明客户端和服务器之间的交互过程。

2. 实用性和实际应用

确保示例代码和测试用例具有实用性和实际应用性。例如,演示一个简单的客户端-服务器应用,展示如何通过 socket 传输数据。这种示例可以直接应用于开发网络应用程序的初学者,帮助他们理解基本的网络通信原理和操作步骤。

在编写测试用例时,关注实际的错误场景和异常处理情况也非常重要。例如,模拟客户端断开连接或网络中断的情况,验证服务器是否能正确地处理这些异常情况并恢复到正常工作状态。

3. 自行尝试和扩展

鼓励读者在理解示例代码和测试用例的基础上,自行尝试和扩展。例如,可以尝试修改示例代码中的端口号或 IP 地址,测试不同网络配置下的表现。另外,可以尝试使用不同的 socket 类型(如 UDP socket),并编写相应的测试用例来验证其行为和性能。

在扩展测试用例时,可以考虑增加更复杂的场景和功能。例如,实现一个支持多客户端并发连接的服务器,并编写相应的性能测试用例来评估其并发处理能力。

示例

为了具体展示以上注意事项,以下提供一个简单的示例:

示例代码 (server.py):

import socket

def start_server():
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_address = ('localhost', 8888)
    server_socket.bind(server_address)
    server_socket.listen(1)
    
    print(f"服务器启动,监听地址:{server_address}")
    
    while True:
        conn, client_address = server_socket.accept()
        print(f"客户端 {client_address} 连接成功!")
        
        try:
            while True:
                data = conn.recv(1024)
                if data:
                    print(f"收到来自客户端的消息:{data.decode()}")
                    conn.sendall(b"消息已收到")
                else:
                    break
        finally:
            conn.close()

if __name__ == "__main__":
    start_server()

示例测试用例 (test_server.py):

import unittest
import socket
import threading
import time
from client import start_client
from server import start_server

class TestSocketExceptionHandling(unittest.TestCase):
    
    @classmethod
    def setUpClass(cls):
        cls.server_thread = threading.Thread(target=start_server)
        cls.server_thread.start()
        # 等待服务器启动
        time.sleep(1)
    
    @classmethod
    def tearDownClass(cls):
        # 关闭服务器
        client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        server_address = ('localhost', 8888)
        client_socket.connect(server_address)
        client_socket.close()
        cls.server_thread.join()
    
    def test_client_disconnect_handling(self):
        # 测试客户端断开连接时,服务器的处理
        client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        server_address = ('localhost', 8888)
        client_socket.connect(server_address)
        
        # 关闭客户端连接
        client_socket.close()
        
        # 等待一段时间以确保服务器处理断开连接
        time.sleep(1)
        
        # 尝试重新连接
        try:
            client_socket.connect(server_address)
        except ConnectionRefusedError:
            # 服务器应该拒绝连接
            pass
        else:
            self.fail("服务器未正确处理客户端断开连接情况")
        finally:
            client_socket.close()

if __name__ == '__main__':
    unittest.main()

        在这个示例中,我们通过一个简单的服务器和相应的测试用例展示了如何处理客户端断开连接的情况,并确保服务器在异常情况下的行为符合预期。同时,使用了 unittest 来组织和运行测试用例,确保能够清晰地展示预期的测试结果。

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

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

相关文章

视频均衡驱动器,SDI产品PIN LMH0387

视频均衡驱动器,功能仿制 TI公司 LMH0387产品。本期间支持 DVB-ASI,作为驱动器能够选择输出速率,作为均衡接收器能支持100m 以上传输距离(线缆类型 Belden1694A)。 工作温度范围:-40℃~85℃:a) 电源电压:3.14V~3.46V: 驱动器输出信号:单端 CML 信号: 均衡器输出信号:LVDS 电平…

爬虫是什么?

目录 1.什么是互联网爬虫? 2.爬虫核心? 3.爬虫的用途? 4.爬虫分类? 5.反爬手段? 1.什么是互联网爬虫? 如果我们把互联网比作一张大的蜘蛛网,那一台计算机上的数据便是蜘蛛网上的一个猎物,而爬虫程序…

Kafka入门到精通(三)-Kafka

Kafka简介 Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动&#xf…

《昇思25天学习打卡营第7天 | 昇思MindSpore模型训练》

第七天 之前学习了模型训练的构建数据集,定义神经网络模型。本节学习了定义超参、损失函数及优化器,输入数据集进行训练与评估。 模型训练的步骤 1.构建数据集 2.定义神经网络模型 3.定义超参、损失函数及优化器 4.输入数据集进行训练与评估

通义灵码上线 Visual Studio 插件市场啦!

通义灵码,是阿里云出品的一款基于通义大模型的智能编码辅助工具,提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码优化、注释生成、代码解释、研发智能问答、异常报错排查等能力,提供代码智能生成、研发智能问答能力。 通义灵…

【华为战报】5月、6月HCIP考试战报!

华为认证:HCIA-HCIP-HCIE 点击查看: 【华为战报】4月 HCIP考试战报! 【华为战报】2月、3月HCIP考试战报! 【华为战报】11月份HCIP考试战报! 【HCIE喜报】HCIE备考2个月丝滑通关,考试心得分享&#xff…

聊一聊 C# 弱引用 底层是怎么玩的

一:背景 1. 讲故事 最近在分析dump时,发现有程序的卡死和WeakReference有关,在以前只知道怎么用,但不清楚底层逻辑走向是什么样的,借着这个dump的契机来简单研究下。 二:弱引用的玩法 1. 一些基础概念 …

IDEA 2024.1.4 的 AI Assistant 终于被激活了,我是这样干的!

ai assistant激活成功后,如图 ai assistant渠道:https://web.52shizhan.cn/activity/ai-assistant 在去年五月份的 Google I/O 2023 上,Google 为 Android Studio 推出了 Studio Bot 功能,使用了谷歌编码基础模型 Codey,Codey 是…

加载数据到mysql并解决原始数据乱码问题

查看linux上数据: 使用命令转换编码: iconv -f GBK -t UTF-8 toutiao.csv -o toutiao2.csv加载数据到mysql: load data local infile /root/toutiao2.csv INTO TABLE pdz FIELDS TERMINATED BY , LINES TERMINATED BY \r\n;

「ETL趋势」FDL数据开发支持版本管理、实时管道支持多对一、数据源新增支持神通

FineDataLink作为一款市场上的顶尖ETL工具,集实时数据同步、ELT/ETL数据处理、数据服务和系统管理于一体的数据集成工具,进行了新的维护迭代。本文把FDL4.1.8最新功能作了介绍,方便大家对比:(产品更新详情:…

口碑最好的麦克风品牌有哪些?轻揭无线领夹麦克风哪个牌子好!

​无线领夹麦克风,无疑是现代音频技术的杰出代表。它摆脱了传统有线麦克风的束缚,让声音的传播更加自由、灵活。无论是追求极致音质的音乐爱好者,还是需要高效沟通的商务人士,无线领夹麦克风都能满足你的需求,让你的声…

计算机基础——经典排序算法总结2

直接插入排序的过程:先将序列第一个记录暂时作为有序子序列,从第二个开始逐个进行插入,直至整个序列有序。一趟排序将elem[i]插入到已排好序elem[0…i-1]中各元素做比较后的任何对应位置,所以未必能选出一个元素放在其最终位置上。…

高考完的假期想学c语言 要注意那些问题?

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!! 大学教得少、内容落后时…

Python应用开发——30天学习Streamlit Python包进行APP的构建(11)

st.bokeh_chart 显示互动式虚化图。 Bokeh 是 Python 的一个图表库。此函数的参数与 Bokeh 的 show 函数的参数非常接近。有关 Bokeh 的更多信息,请访问 https://bokeh.pydata.org。 要在 Streamlit 中显示 Bokeh 图表,请在调用 Bokeh 的 show 时调用 st.bokeh_chart。 Fu…

SDIO学习(2)--SD卡 2.0协议

本文参考文档: 《SD Specifications Part 1 Physical Layer Simplified Specification Version 2.00》 1 SD卡简介 1.1 SD卡概念 1.2 SD卡外形和接口 Clk:时钟线,由SDIO主机产生 CMD:命令控制线,SDIO主机通过改…

flutter开发实战-ListWheelScrollView与自定义TimePicker时间选择器

flutter开发实战-ListWheelScrollView与自定义TimePicker 最近在使用时间选择器的时候,需要自定义一个TimePicker效果,当然这里就使用了ListWheelScrollView。ListWheelScrollView与ListView类似,但ListWheelScrollView渲染效果类似滚筒效果…

Oracle新特性速递:未来数据库技术的无限可能

文章目录 一、自治数据库:智能化与自动化的革命二、机器学习集成:智能数据分析的新境界三、区块链技术:确保数据完整性与透明性四、云原生数据库:灵活扩展与快速部署五、人工智能优化器:智能查询执行计划《Oracle从入门…

上海约瑟电器 JOBS(KG9001)拉绳开关 严格质量细节监控

基本信息 品牌:JOSEF约瑟 型号:JOBS(KG9001) 技术参数 动作角度:30 电源电压:220V 工作电压:380V 额定电流:5A 防护等级:IP65 复位方式:支持自动(I)和手动&am…

高考填报志愿三连问,从人格优势分析兴趣和专业

“我的兴趣爱好什么?” “我的理想是什么?” “我想成为什么?” ------高考填报志愿三连问! 最近我在知乎上看过一个比较有意义的提问,提问的也是高考填报志愿的同学,自从高考后,每日三连问&…

Python基于逻辑回归分类模型、决策树分类模型、LightGBM分类模型和XGBoost分类模型实现车辆贷款违约预测项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 随着经济的发展和人民生活水平的提高,汽车消费在居民消费中所占比例逐渐增加,汽…