Python基于Socket实现简单多人聊天室代码示例
本文介绍使用Python标准库socket和select模块实现的简易多人聊天室。服务端负责管理连接与消息转发,客户端通过多线程分别处理接收与发送。启动服务端后,客户端连接并设置昵称即可加入聊天,所有消息经服务端广播至其他在线用户。
本文分享了一个使用Python编写的多人聊天室完整代码示例,供读者参考学习。
作为Python初学者的练手项目,该聊天室实现了基础的即时通讯功能。
服务端实现代码(Server.py)
import socket,select,thread;
host=socket.gethostname()
port=5963
addr=(host,port)
inputs=[]
fd_name={}
def who_in_room(w):
name_list=[]
for k in w:
name_list.append(w[k])
return name_list
def conn():
print 'runing'
ss=socket.socket()
ss.bind(addr)
ss.listen(5)
return ss
def new_coming(ss):
client,add=ss.accept()
print 'welcome %s %s' % (client,add)
wel='''welcome into the talking room .
please decide your name.....'''
try:
client.send(wel)
name=client.recv(1024)
inputs.append(client)
fd_name[client]=name
nameList="Some people in talking room, these are %s" % (who_in_room(fd_name))
client.send(nameList)
except Exception,e:
print e
def server_run():
ss=conn()
inputs.append(ss)
while True:
r,w,e=select.select(inputs,[],[])
for temp in r:
if temp is ss:
new_coming(ss)
else:
disconnect=False
try:
data= temp.recv(1024)
data=fd_name[temp]+' say : '+data
except socket.error:
data=fd_name[temp]+' leave the room'
disconnect=True
if disconnect:
inputs.remove(temp)
print data
for other in inputs:
if other!=ss and other!=temp:
try:
other.send(data)
except Exception,e:
print e
del fd_name[temp]
else:
print data
for other in inputs:
if other!=ss and other!=temp:
try:
other.send(data)
except Exception,e:
print e
if __name__=='__main__':
server_run()
客户端实现代码(client.py)
import socket,select,threading,sys;
host=socket.gethostname()
addr=(host,5963)
def conn():
s=socket.socket()
s.connect(addr)
return s
def lis(s):
my=[s]
while True:
r,w,e=select.select(my,[],[])
if s in r:
try:
print s.recv(1024)
except socket.error:
print 'socket is error'
exit()
def talk(s):
while True:
try:
info=raw_input()
except Exception,e:
print 'can\'t input'
exit()
try:
s.send(info)
except Exception,e:
print e
exit()
def main():
ss=conn()
t=threading.Thread(target=lis,args=(ss,))
t.start()
t1=threading.Thread(target=talk,args=(ss,))
t1.start()
if __name__=='__main__':
main()
运行流程为:首先启动服务端程序,随后客户端连接并输入昵称加入聊天室。服务端会向新加入的客户端发送当前在线用户列表,并将任一客户端发出的消息通过服务端转发给其他所有客户端。
实际运行效果如下所示:

以上就是本文的全部内容,希望能为读者的Python学习提供有益帮助,欢迎继续支持本站获取更多技术资源。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













