python实现简单多人聊天室

作者:dk_zhe 时间:2022-08-17 15:04:13 

本文实例为大家分享了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实现简单多人聊天室

来源:https://blog.csdn.net/dk_zhe/article/details/37820965

标签:python,聊天室
0
投稿

猜你喜欢

  • ASP环境中使用QQ纯真版IP数据库QQWry.dat

    2010-02-26 13:35:00
  • asp文章中随机插入网站版权文字的实现代码

    2011-04-15 11:11:00
  • Oracle存储过程之数据库中获取数据实例

    2009-03-04 10:57:00
  • jQuery实现同一点击,两个不同链接,指向两个不同的iframe

    2010-06-21 10:52:00
  • 图文详解vscode配置运行php项目完整版

    2023-05-28 22:56:03
  • python运行cmd命令行的3种方法总结

    2023-07-15 18:40:49
  • 正则表达式结合数组提取文章中的文件名

    2007-10-12 13:59:00
  • url地址栏加密和解密函数 Base64

    2008-07-10 13:29:00
  • 页面设计之个性元素与共性元素

    2008-07-17 12:36:00
  • JSP实现客户信息管理系统

    2023-06-30 05:32:36
  • SQL语句操作主从关系表

    2011-06-19 13:19:05
  • 如何在SQL2000的查询中使用XML-Data?

    2010-06-18 19:26:00
  • python批量修改交换机密码的示例

    2023-06-29 07:52:42
  • asp三天学好ADO对象之第一天

    2008-10-09 12:46:00
  • Dreamweaver初学者常见问题解答

    2007-02-03 11:39:00
  • Mootools 1.2教程(11)——Fx.Morph、Fx选项和Fx事件

    2008-12-04 16:03:00
  • PHP抓取及分析网页的方法详解

    2023-11-24 08:17:10
  • 一个二级伸缩下拉菜单代码

    2008-06-24 18:12:00
  • Safari参考样式库之webkit

    2009-07-26 09:50:00
  • 如何在python中使用selenium的示例

    2023-07-15 20:52:09
  • asp之家 网络编程 m.aspxhome.com