本文實(shí)例為大家分享了python實(shí)現(xiàn)多人聊天室的具體代碼,供大家參考,具體內(nèi)容如下
剛開始學(xué)習(xí)python,寫了一個(gè)聊天室練練手。
Server.py
import socket,select,thread; host=socket.gethostname()port=5963addr=(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()
運(yùn)行時(shí)先啟動(dòng)服務(wù)端。進(jìn)入聊天室先起一個(gè)昵稱。服務(wù)端會(huì)向客戶端發(fā)送當(dāng)前聊天室內(nèi)聊天人的列表。一個(gè)客戶端發(fā)出的消息會(huì)通過(guò)服務(wù)端發(fā)給其他客戶端。
效果如下:
新聞熱點(diǎn)
疑難解答
圖片精選