Python中使用server()函数实现TCP/IP协议的简单聊天室程序
发布时间:2023-12-18 18:51:57
在Python中,可以使用socket模块的server()函数来实现一个简单的TCP/IP协议的聊天室程序。该函数用于创建一个服务器套接字,并监听指定的主机和端口。下面是一个使用server()函数实现的简单聊天室程序的例子:
import socket
import threading
def handle_client(client_socket, addr):
while True:
# 接收客户端发送的消息
data = client_socket.recv(1024)
if not data:
# 客户端断开连接
print(f"Client {addr} disconnected")
break
else:
# 将消息广播给所有客户端
broadcast(data)
def broadcast(message):
for client in clients:
client.send(message)
def start_server():
# 创建服务器套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 8888))
server_socket.listen(5)
print("Server started. Listening on port 8888...")
while True:
# 等待客户端连接
client_socket, addr = server_socket.accept()
print(f"Client {addr} connected")
# 处理客户端连接的线程
client_thread = threading.Thread(target=handle_client, args=(client_socket, addr))
client_thread.start()
# 保存客户端套接字到列表中
clients.append(client_socket)
clients = []
if __name__ == "__main__":
start_server()
在上述例子中,首先定义了一个handle_client()函数,用于处理客户端连接。在该函数中,通过recv()函数接收客户端发送的消息,并通过broadcast()函数将消息广播给所有客户端。如果客户端断开连接,则退出循环。
接下来,定义了一个broadcast()函数,用于将接收到的消息广播给所有客户端。这里使用了一个列表clients来保存所有的客户端套接字。
最后,定义了一个start_server()函数,用于创建服务器套接字并监听指定的主机和端口。在循环中,使用accept()函数等待客户端连接,并创建一个线程来处理每个客户端的连接。客户端连接的处理逻辑由handle_client()函数实现。
在主程序中,调用start_server()函数启动聊天室服务器。可以在多个终端中运行客户端程序,与服务器建立连接后,输入消息即可在所有客户端之间进行广播。
