找回密码
 中文实名注册
搜索
查看: 131|回复: 1

聊天室

[复制链接]

7

主题

1

回帖

201

积分

中级会员

积分
201
发表于 2025-7-25 16:44:35 | 显示全部楼层 |阅读模式
[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()
    

回复

使用道具 举报

8

主题

17

回帖

660

积分

高级会员

积分
660
发表于 2025-7-26 15:51:49 | 显示全部楼层
:):):):):):):)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 中文实名注册

本版积分规则

快速回复 返回顶部 返回列表