python聊天室
文章目录
- python聊天室
- chat_server
- chat_client
- 使用方式
- 1.局域网聊天
- 2.公网聊天
下面是一个简单的示例,包含了chat_client.py和chat_server.py的代码。
chat_server
chat_server.py监听指定的端口,并接收来自客户端的消息,并将消息广播给所有连接到服务器的客户端
import socket
import threadingdef handle_client(client_socket, client_address):# 处理每个客户端的函数while True:try:data = client_socket.recv(1024).decode('utf-8') # 接收客户端发送的消息if not data:breakprint(f'{client_address[0]}:{client_address[1]} - {data}') # 打印客户端的消息和地址broadcast_data = f'{client_address[0]}:{client_address[1]} - {data}'.encode('utf-8') # 准备广播消息broadcast(broadcast_data, client_socket) # 广播消息给所有连接到服务器的客户端except:breakclient_socket.close()def broadcast(message, sender_socket):# 广播消息给所有连接到服务器的客户端for client in clients:if client != sender_socket:client.send(message)def start_server(port):server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)server_socket.bind(('0.0.0.0', port)) # 绑定服务器的 IP 地址和端口号server_socket.listen(10) # 监听客户端连接,允许最多 5 个同时连接print(f'服务器已启动,监听端口 {port}')while True:client_socket, client_address = server_socket.accept() # 接受客户端的连接请求clients.append(client_socket) # 将客户端添加到客户端列表print(f'客户端已连接:{client_address[0]}:{client_address[1]}')client_thread = threading.Thread(target=handle_client, args=(client_socket, client_address))client_thread.start() # 启动一个线程处理客户端clients = []if __name__ == '__main__':port = int(input('请输入端口号:'))start_server(port)
chat_client
chat_client.py连接到服务器,并允许用户发送消息
import socket
import threadingdef receive_messages(client_socket):# 接收服务器发送的消息while True:try:data = client_socket.recv(1024).decode('utf-8') # 接收消息print(data) # 打印消息except:breakclient_socket.close()def send_message(client_socket):# 发送消息给服务器while True:message = input() # 输入消息client_socket.send(message.encode('utf-8')) # 发送消息到服务器client_socket.close()def start_client(server_ip, server_port):client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)try:client_socket.connect((server_ip, server_port)) # 连接到服务器print(f'已连接到 {server_ip}:{server_port}')receive_thread = threading.Thread(target=receive_messages, args=(client_socket,))receive_thread.start() # 启动一个线程接收服务器的消息send_thread = threading.Thread(target=send_message, args=(client_socket,))send_thread.start() # 启动一个线程发送消息except:print('连接失败。')if __name__ == '__main__':server_ip = input('请输入服务器 IP 地址:')server_port = int(input('请输入服务器端口号:'))start_client(server_ip, server_port)
使用方式
1.局域网聊天
在本地使用
cmd
运行server,client可以起任意数量(不超过10个,在server里设置最大数量),client的IP地址填写自己本地ip即可,本地ip可以用ipconfig
指令获取。
2.公网聊天
需要你有一个公网服务器,启动server即可,然后在任何电脑上启动client参与群聊。