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

使用select函数实现Python中的简单TCP服务器。

发布时间:2023-12-24 04:14:27

TCP(传输控制协议)是一种在网络中提供可靠数据传输的协议。在Python的socket模块中,我们可以使用select函数来实现一个简单的TCP服务器。

下面是一个使用select函数实现的简单TCP服务器的例子:

import socket
import select

# 创建TCP服务器的socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定服务器的IP地址和端口号
server_address = ('localhost', 8888)
server_socket.bind(server_address)

# 监听连接
server_socket.listen(10)

# 将服务器的socket添加到select监听列表中
sockets_list = [server_socket]

print("服务器已启动,等待连接...")

while True:
    # 使用select监听sockets_list中的socket,等待可读事件
    read_sockets, _, _ = select.select(sockets_list, [], [])

    for notified_socket in read_sockets:
        # 如果有新的连接请求
        if notified_socket == server_socket:
            # 接受新的连接
            client_socket, client_address = server_socket.accept()
            sockets_list.append(client_socket)

            print("新的连接:{}".format(client_address))

            # 向客户端发送欢迎消息
            client_socket.send("欢迎来到服务器!".encode())

        # 如果是已连接的客户端发送消息
        else:
            # 接收消息
            message = notified_socket.recv(1024).decode()

            # 如果消息为空,表示客户端断开连接
            if not message:
                print("连接关闭:{}".format(notified_socket.getpeername()))

                # 从列表中移除客户端的socket
                sockets_list.remove(notified_socket)
                continue

            print("接收到来自{}的消息:{}".format(notified_socket.getpeername(), message))

            # 将收到的消息发送回客户端
            notified_socket.send("收到消息:{}".format(message).encode())

# 关闭服务器的socket
server_socket.close()

运行上述代码后,服务器将会监听本地主机的8888端口,并等待客户端的连接。当有新的客户端连接时,服务器将发送欢迎消息并保存与客户端的连接。当已连接的客户端发送消息时,服务器将接收并将其原样发送回客户端。如果客户端断开连接,服务器将从连接列表中移除该客户端。

注意:这只是一个简单的示例代码,实际的服务器应该具有处理多个客户端同时连接的能力,并且处理异常情况和错误。对于实际的生产环境,可以考虑使用Python的异步网络库(如asyncio、Twisted等)来实现更高级和可扩展的服务器。