使用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等)来实现更高级和可扩展的服务器。
