国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

python實(shí)現(xiàn)簡(jiǎn)單多人聊天室

2020-02-16 00:05:14
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文實(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ā)給其他客戶端。

效果如下:

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新化县| 新安县| 扎赉特旗| 绩溪县| 乐亭县| 武隆县| 大邑县| 东源县| 平昌县| 区。| 资源县| 临海市| 大理市| 黄冈市| 聂拉木县| 金华市| 新郑市| 上高县| 邵武市| 顺义区| 西青区| 夹江县| 阿克苏市| 达拉特旗| 平舆县| 临汾市| 双江| 陇川县| 山阴县| 柳江县| 商都县| 延津县| 玛纳斯县| 苏州市| 阳信县| 三亚市| 和平县| 乌拉特中旗| 开封县| 云龙县| 陵川县|