本文使用创作助手。
下面是一个使用Python和Socket编程实现网络聊天程序的简单示例:
服务器端代码:
import socket
import threading
# 服务器地址和端口
SERVER_HOST = '0.0.0.0'
SERVER_PORT = 12345
# 存储连接的客户端和对应的昵称
clients = {}
# 用于接收和处理消息的函数
def handle_client(client_socket, client_address):
# 接收客户端的昵称
nickname = client_socket.recv(1024).decode()
print(f'{nickname} 进入聊天室')
# 将客户端的昵称和对应的socket存储到字典中
clients[client_socket] = nickname
# 广播消息给其他客户端
broadcast(f'{nickname} 加入了聊天室'.encode())
while True:
try:
# 接收客户端发送的消息
message = client_socket.recv(1024)
if message:
# 广播消息给其他客户端
broadcast(message, nickname + ': ')
else:
# 如果接收的消息为空,说明客户端断开连接
remove_client(client_socket)
break
except:
# 如果发生错误,说明客户端断开连接
remove_client(client_socket)
break
# 广播消息给所有客户端
def broadcast(message, prefix=''):
for client_socket in clients:
client_socket.send(prefix.encode() + message)
# 移除断开连接的客户端
def remove_client(client_socket):
nickname = clients[client_socket]
del clients[client_socket]
broadcast(f'{nickname} 离开了聊天室'.encode())
# 创建服务器并监听客户端连接
def start_server():
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((SERVER_HOST, SERVER_PORT))
server_socket.listen()
print('服务器启动,等待客户端连接...')
while True:
client_socket, client_address = server_socket.accept()
# 启动独立的线程来处理新的客户端连接
client_thread = threading.Thread(target=handle_client, args=(client_socket, client_address))
client_thread.start()
if __name__ == '__main__':
start_server()
客户端代码:
import socket
import threading
# 服务器地址和端口
SERVER_HOST = 'localhost'
SERVER_PORT = 12345
# 客户端登录
def login():
nickname = input('请输入您的昵称: ')
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((SERVER_HOST, SERVER_PORT))
client_socket.send(nickname.encode())
# 启动独立的线程来接收服务器的消息
receive_thread = threading.Thread(target=receive_messages, args=(client_socket,))
receive_thread.start()
# 不断接收用户输入的消息并发送给服务器
while True:
message = input()
client_socket.send(message.encode())
# 接收服务器的消息
def receive_messages(client_socket):
while True:
message = client_socket.recv(1024)
print(message.decode())
if __name__ == '__main__':
login()
在这个示例中,服务器和客户端分别运行在不同的机器上。客户端在登录时输入昵称,然后与服务器建立连接。服务器接收客户端的昵称,并将其存储在字典中。当一个客户端发送消息时,服务器会将消息广播给所有其他客户端。
请注意,这只是一个简单的示例,功能还不完善。你可以根据自己的需求进行进一步的开发和扩展,例如添加用户登录验证、私聊功能等。