代码拉取完成,页面将自动刷新
"""
聊天室 客户端
"""
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()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。