欢迎访问宙启技术站
智能推送

Python中typing模块的网络和套接字类型注解

发布时间:2024-01-13 19:33:29

typing模块是Python中用于类型注解的标准库之一,它提供了一些用于定义和使用类型的工具。在网络和套接字编程中,我们可以使用typing模块来注解参数和返回值的类型,以提高代码的可读性和可维护性。

在Python中进行网络和套接字编程时,我们通常使用socket模块来创建和管理套接字。typing模块提供了一个套接字类型的注解来帮助我们标识套接字的类型。

示例代码如下所示:

import socket
from typing import Any, Tuple

def create_server(host: str, port: int) -> socket.socket:
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind((host, port))
    server_socket.listen(1)
    return server_socket

def handle_client(client_socket: socket.socket) -> None:
    while True:
        data = client_socket.recv(1024)
        if not data:
            break
        client_socket.sendall(data)
    client_socket.close()

def start_server(host: str, port: int) -> None:
    server_socket = create_server(host, port)
    while True:
        client_socket, _ = server_socket.accept()
        handle_client(client_socket)

def create_client() -> socket.socket:
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    return client_socket

def connect_client(client_socket: socket.socket, host: str, port: int) -> None:
    client_socket.connect((host, port))
    client_socket.sendall(b"Hello, server!")
    data = client_socket.recv(1024)
    print(data.decode())
    client_socket.close()

if __name__ == "__main__":
    host = "localhost"
    port = 5000
    server_socket = create_server(host, port)
    print("Server started at {}:{}".format(host, port))
    start_server(host, port)

    client_socket = create_client()
    connect_client(client_socket, host, port)

在上面的例子中,我们首先将函数create_server的参数host和port分别注解为str和int类型,返回值注解为socket.socket类型。函数create_server创建了一个服务器套接字,并将其绑定到指定的主机和端口上。然后通过函数handle_client处理接受到的客户端套接字数据,并将其发送回客户端。

函数start_server根据指定的主机和端口创建服务器套接字,并进入一个无限循环中,不断接受新的客户端连接,并通过handle_client函数来处理客户端请求。

函数create_client创建了一个客户端套接字,并返回该套接字。函数connect_client接受一个已创建的客户端套接字、主机和端口作为参数,然后连接到指定的主机和端口,并发送一条消息给服务器,然后等待服务器的回复并打印。

最后,在主函数中,我们先创建服务器套接字并开始监听指定的端口,然后创建一个客户端套接字并连接到服务器。注意,在这个例子中,服务器和客户端都运行在本地,所以我们将主机地址设置为"localhost",端口设置为5000。