使用Python编写一个简易的聊天室应用程序
发布时间:2023-12-04 20:06:18
下面是一个使用Python编写的简易聊天室应用程序的示例:
import socket
import threading
class ChatServer:
def __init__(self, host, port):
self.host = host
self.port = port
self.server_socket = None
self.clients = []
self.lock = threading.Lock()
def start(self):
# 创建socket并绑定host和port
self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server_socket.bind((self.host, self.port))
self.server_socket.listen(5)
print("服务器启动,监听 %s:%d" % (self.host, self.port))
while True:
# 接受新的客户端连接
client_socket, address = self.server_socket.accept()
print("新的客户端连接:%s:%d" % (address[0], address[1]))
# 创建新的线程处理客户端请求
client_thread = threading.Thread(target=self.handle_client, args=(client_socket,))
client_thread.start()
def handle_client(self, client_socket):
with self.lock:
self.clients.append(client_socket)
while True:
try:
# 接收客户端消息
data = client_socket.recv(1024).decode()
if not data:
# 客户端断开连接
break
print("收到消息:%s" % data)
self.broadcast(data, client_socket)
except Exception as e:
print("出错:%s" % str(e))
break
# 关闭客户端连接
client_socket.close()
with self.lock:
self.clients.remove(client_socket)
print("客户端断开连接")
def broadcast(self, message, sender_socket):
with self.lock:
for client_socket in self.clients:
if client_socket != sender_socket:
try:
# 发送消息给其他客户端
client_socket.sendall(message.encode())
except Exception as e:
print("出错:%s" % str(e))
if __name__ == '__main__':
# 创建聊天服务器,并绑定到本地IP和端口
chat_server = ChatServer("127.0.0.1", 12345)
chat_server.start()
此聊天室应用程序使用socket库创建服务器和客户端之间的连接。服务器使用多线程处理客户端连接和消息广播。每个客户端连接都在一个单独的线程中处理。当服务器收到消息时,它会将消息发送给所有其他客户端。
为了使用示例聊天室应用程序,你可以按照以下步骤进行操作:
1. 运行上述代码,启动聊天服务器。
2. 打开多个终端窗口,每个窗口对应一个客户端。
3. 在客户端终端窗口中,使用telnet命令连接到服务器。例如:telnet 127.0.0.1 12345
4. 在一个客户端终端窗口中输入消息,该消息将被广播给其他所有客户端。
5. 在其他客户端终端窗口中,你将看到收到的广播消息。
6. 你可以在多个客户端之间交互发送消息,所有客户端都可以看到收到的消息。
这个简易聊天室应用程序虽然代码比较简单,但可以作为你开始理解和构建更复杂的聊天室应用程序的起点。你可以在此基础上添加更多功能,如用户认证、私聊、群聊、多房间支持等。
