使用Python编写一个简单的在线聊天程序
发布时间:2023-12-04 08:09:17
在Python中编写一个简单的在线聊天程序可以使用Socket模块来实现网络通信。以下是一个简单的示例代码:
import socket
import threading
# 创建一个socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = '127.0.0.1' # 本机IP地址
port = 55555 # 设置端口号
# 绑定IP地址和端口号
server_socket.bind((host, port))
# 监听连接
server_socket.listen()
# 存储已连接的客户端信息
clients = []
nicknames = []
# 广播消息给所有连接的客户端
def broadcast(message):
for client in clients:
client.send(message)
# 处理客户端的消息
def handle(client):
while True:
try:
# 接收客户端发送的消息
message = client.recv(1024)
# 广播消息给其他客户端
broadcast(message)
except:
# 客户端断开连接
index = clients.index(client)
clients.remove(client)
client.close()
nickname = nicknames[index]
nicknames.remove(nickname)
broadcast(f'{nickname}离开聊天室'.encode('utf-8'))
break
# 接收客户端连接,并处理连接
def receive():
while True:
# 接收客户端的连接请求
client, address = server_socket.accept()
print(f"连接地址: {str(address)}")
# 发送欢迎消息给新连接的客户端
client.send('欢迎进入聊天室,请输入昵称:'.encode('utf-8'))
# 存储新连接的客户端
clients.append(client)
# 接收客户端发送的昵称
nickname = client.recv(1024).decode('utf-8')
nicknames.append(nickname)
# 广播新用户加入的消息给所有客户端
print(f'{nickname}已连接')
broadcast(f'{nickname}加入聊天室'.encode('utf-8'))
# 单独处理每个客户端的消息
client.send('连接成功'.encode('utf-8'))
thread = threading.Thread(target=handle, args=(client,))
thread.start()
if __name__ == "__main__":
print("等待连接中...")
receive()
运行程序后,在另一个终端或者电脑上使用telnet命令连接到本机IP地址和指定的端口号(例如:telnet 127.0.0.1 55555),即可进入聊天室。不同的连接在服务器端会分配一个昵称,并可以互相发送消息。
`bash
连接地址: ('127.0.0.1', 51813)
连接地址: ('127.0.0.1', 51814)
ZhangSan已连接
欢迎进入聊天室,请输入昵称:
李四已连接
welcome to chat room, please enter nickname:
Alice已连接
hello world
ZhangSan:
hello world
ZhangSan
Alice:
hi everyone!
