1 Star 0 Fork 1

Levi0321/chat

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
chat_client.py 1.64 KB
一键复制 编辑 原始数据 按行查看 历史
Levi0321 提交于 2023-03-01 14:02 . init
"""
聊天室 客户端
"""
from socket import *
from multiprocessing import Process
import re
# 服务器地址
ADDR = ("121.5.90.43", 8888)
# 名字验证:3-10位数字字母下划线-构成,不能以数字和-开头
def check(name):
if re.search(r"^[_a-zA-Z][-\w]{2,9}$", name):
return True
else:
return False
# 进入聊天室
def login(sock):
while True:
name = input("请输入昵称:")
if not check(name):
print("3-10位数字字母下划线-构成,不能以数字或-开头")
continue
msg = "LOGIN " + name # 组织格式
sock.sendto(msg.encode(), ADDR)
result, addr = sock.recvfrom(128)
if result == b"Y":
print("您已进入聊天室")
return name
else:
print("该昵称已存在")
# 子进程
def recv_msg(sock):
while True:
data, addr = sock.recvfrom(1024 * 10)
print("\n" + data.decode() + "\n发言:", end='')
def chat(sock, name):
p = Process(target=recv_msg, args=(sock,), daemon=True)
p.start()
while True:
content = input("发言:")
if not content:
continue
if content == "quit":
break
msg = "CHAT %s %s" % (name, content)
sock.sendto(msg.encode(), ADDR)
def quit(sock, name):
msg = "QUIT " + name
sock.sendto(msg.encode(), ADDR)
print("您已退出群聊,谢谢使用")
def main():
sock = socket(AF_INET, SOCK_DGRAM)
name = login(sock) # 进入
try:
chat(sock, name) # 聊天
except:
pass
quit(sock, name) # 退出
if __name__ == '__main__':
main()
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Python
1
https://gitee.com/levi0321/chat.git
[email protected]:levi0321/chat.git
levi0321
chat
chat
master

搜索帮助