commit 07a4b175cb6de60e81f66f12eac44a698b6d9498 Author: Aaron Date: Tue Sep 16 16:07:48 2025 +0800 first commit diff --git a/client1.py b/client1.py new file mode 100644 index 0000000..5ba04e0 --- /dev/null +++ b/client1.py @@ -0,0 +1,59 @@ +import json +import socket + + +def chat(username, chat_obj, content): + ''' + 发送聊天信息 + ''' + pass + + +# 创建socket +ip_port = ("127.0.0.1", 9000) +sk = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + +# 选择菜单 +while 1: + print("menu".center(30, "=")) + print("1.login".center(30, " ")) + print("2.register".center(30, " ")) + print("=".center(30, "=")) + choice = input(">>>") + + if choice == "1": + username = input("用户名:") + password = input("密码:") + data = { + "option": "login", + "username": username, + "password": password + } + sk.sendto(json.dumps(data).encode("utf-8"), ip_port) + msg, addr = sk.recvfrom(1024) + # {"status": 1} + if json.loads(msg.decode("utf-8"))["status"]: + chat_obj = input("输入收件人:") + content = input("输入内容:") + chat(username, chat_obj, content) + continue + else: + print("登录失败") + continue + elif choice == "2": + username = input("用户名:") + password = input("密码:") + data = { + "option": "register", + "username": username, + "password": password + } + sk.sendto(json.dumps(data).encode("utf-8"), ip_port) + msg, addr = sk.recvfrom(1024) + # {"status": 1} + if json.loads(msg.decode("utf-8"))["status"]: + print("注册成功") + continue + else: + print(json.loads(msg.decode("utf-8"))["msg"]) + continue diff --git a/client2.py b/client2.py new file mode 100644 index 0000000..44c2d4d --- /dev/null +++ b/client2.py @@ -0,0 +1 @@ +import socket \ No newline at end of file diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..4f3a959 --- /dev/null +++ b/readme.md @@ -0,0 +1,28 @@ +# 目前开发进度 + +## 服务端 + +- 可以实现接受用户的登录注册请求 +- 并且可以显示注册用户和当前在线用户 + +## 客户端 + +- 实现功能菜单选择 +- 实现登录注册的逻辑,可以与服务端通信 + +# 待实现的功能 + +## 服务端 + +- 将注册用户的信息持久化存储 +- 实现在线用户存活检测 + - 客户端3秒发送hello消息 + - 9秒未搜到客户端的hello消息,判断该用户已经下线 +- 实现聊天功能 + - 将需要发送到对应客户端的消息存在客户端对象中 + - 当收到客户端hello消息的时候,将未读消息发送过去 + +## 客户端 + +- 发送聊天信息 +- 接受未读消息 \ No newline at end of file diff --git a/server.py b/server.py new file mode 100644 index 0000000..7808ff4 --- /dev/null +++ b/server.py @@ -0,0 +1,41 @@ +import json +import socket + +# 创建socket +sk = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) +sk.bind(("0.0.0.0", 9000)) +active = [] +db = {} +chat_msg = {} + +while 1: + print(f"当前活跃用户:{active} 当前注册用户:{db}") + data, addr = sk.recvfrom(2048) + data = json.loads(data) + res = {"status": 0} + if data["option"] == "login": + username = data["username"] + password = data["password"] + if username in db: + if db[username] == password: + res = {"status": 1} + active.append(data["username"]) + else: + res = {"status": 0} + else: + res = {"status": 0} + elif data["option"] == "register": + username = data["username"] + password = data["password"] + if username in db: + res = {"status": 0, "msg": "用户名已存在"} + else: + db[username] = password + res = {"status": 1, "msg": "注册成功"} + elif data["option"] == "chat": + # 接受聊天信息,并且存入聊天临时字典 + pass + elif data["option"] == "hello": + # 接受客户端的存活状态,如果发现临时聊天字典有该用户的未收消息,发送过去 + pass + sk.sendto(json.dumps(res).encode("utf-8"), addr) \ No newline at end of file