[Python] 纯文本查看 复制代码 import socket
import threading
import sys
class ChatClient:
def __init__(self):
# 默认连接本地服务器,无需用户输入IP
self.HOST = 'localhost'
self.PORT = 12345
self.client_socket = None
self.nickname = None
def receive_messages(self):
"""接收服务器消息"""
while True:
try:
message = self.client_socket.recv(4096).decode('utf-8')
if message:
print(message)
else:
break
except:
print("\n与服务器的连接已断开")
self.client_socket.close()
sys.exit(0)
def send_messages(self):
"""发送消息到服务器"""
while True:
try:
message = input()
if message.lower() == 'exit':
print("退出聊天室")
self.client_socket.close()
sys.exit(0)
full_message = f'{self.nickname}: {message}'
self.client_socket.send(full_message.encode('utf-8'))
except:
print("发送消息失败")
self.client_socket.close()
sys.exit(0)
def start(self):
"""启动客户端"""
# 获取用户昵称
self.nickname = input("请输入你的昵称: ")
if not self.nickname:
self.nickname = f"用户{socket.gethostname()}"
# 连接服务器(自动使用本地地址)
self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
self.client_socket.connect((self.HOST, self.PORT))
print(f"已连接到本地聊天室服务器")
print("输入 'exit' 可以退出聊天室")
except:
print(f"无法连接到服务器,请确保服务器已启动")
return
# 发送昵称
self.client_socket.send(self.nickname.encode('utf-8'))
# 启动接收线程
receive_thread = threading.Thread(target=self.receive_messages)
receive_thread.start()
# 启动发送线程
send_thread = threading.Thread(target=self.send_messages)
send_thread.start()
if __name__ == "__main__":
print("本地聊天室客户端")
client = ChatClient()
client.start()
|