本帖最后由 李承键 于 2025-7-25 16:35 编辑
[C++] 纯文本查看 复制代码 import socket
import threading
import sys
def receive_messages(client_socket):
"""接收服务器发送的消息"""
while True:
try:
message = client_socket.recv(4096).decode('utf-8')
if message:
print(message)
else:
break
except:
print("与服务器的连接已断开")
client_socket.close()
break
def send_messages(client_socket, nickname):
"""发送消息到服务器"""
while True:
try:
message = input()
if message.lower() == 'exit':
client_socket.close()
sys.exit(0)
full_message = f'{nickname}: {message}'
client_socket.send(full_message.encode('utf-8'))
except:
print("发送消息失败")
client_socket.close()
break
def start_client():
"""启动客户端"""
# 服务器地址和端口
HOST = input("请输入服务器IP地址 (默认: localhost): ") or 'localhost'
PORT = 12345
# 获取用户昵称
nickname = input("请输入你的昵称: ")
if not nickname:
nickname = f"用户{socket.gethostname()}"
# 连接服务器
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
client_socket.connect((HOST, PORT))
print(f"已连接到 {HOST}:{PORT}")
except:
print(f"无法连接到服务器 {HOST}:{PORT}")
return
# 发送昵称到服务器
client_socket.send(nickname.encode('utf-8'))
# 启动接收消息线程
receive_thread = threading.Thread(target=receive_messages, args=(client_socket,))
receive_thread.start()
# 启动发送消息线程
send_thread = threading.Thread(target=send_messages, args=(client_socket, nickname))
send_thread.start()
if __name__ == "__main__":
print("聊天室客户端")
print("输入 'exit' 退出聊天室")
start_client()
|