还是用UDP,socket作为主体来实现,之前我们已经实现过单对单socket通信,这次想实现群发功能
原理其实就是一台服务器在负责分配转发数据,来达成广播的效果,这些思路其实也差不多
但是多人聊天没有这么强的规整性,你可能没等到A的消息,就要去和B说话了,多线程就可以实现这一点
给个链接,感觉写的很好:https://www.cnblogs.com/yeayee/p/4952022.html
主要就是依靠threading模块
你可以理解为,我们创建了一个类似于数组的空间,来存放我们所有要执行的工作,然后同时开始,然后通过阻塞父进程来等待子进程结束,这就是多线程工作
直接上代码段好了,用txt和字典可以伪造一个非常非常破的聊天室,自己其实感觉做的挺垃圾的,毕竟最后的成品,本地就算是存储了个人信息,要群发消息的话,还需要服务器存放的字典的values来追踪各个地址,完全是脱节的,唉,菜到落泪,不会数据库,也没有界面,不过总算是熟悉了一波字典的操作,争取早日用上json
SERVER:
import json
import socket
name_dict={} #空字典
def register(data,client_addr):
f=open("members.txt",'a+')
data=data[9::]
key=data.decode('utf-8')
line=f.readline().strip()
print(line)
result=line.find(key)
if result >=0:
s="your information has been used, please register again"
server.sendto(s.encode('utf-8'),client_addr)
f.close()
return 1
while line:
line = f.readline().strip()
result=line.find(key)
if result>