python实现简单多人聊天室


Posted in Python onDecember 11, 2018

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 域名分析工具实现代码
Jul 15 Python
从零学python系列之教你如何根据图片生成字符画
May 23 Python
Python绘制3D图形
May 03 Python
利用Python写一个爬妹子的爬虫
Jun 08 Python
pandas使用get_dummies进行one-hot编码的方法
Jul 10 Python
Python 删除整个文本中的空格,并实现按行显示
Jul 24 Python
pandas计数 value_counts()的使用
Jun 24 Python
使用python将mysql数据库的数据转换为json数据的方法
Jul 01 Python
对Python生成器、装饰器、递归的使用详解
Jul 19 Python
Django对models里的objects的使用详解
Aug 17 Python
Flask框架路由和视图用法实例分析
Nov 07 Python
Python线程threading模块用法详解
Feb 26 Python
在python中利用KNN实现对iris进行分类的方法
Dec 11 #Python
python 划分数据集为训练集和测试集的方法
Dec 11 #Python
Python sklearn KFold 生成交叉验证数据集的方法
Dec 11 #Python
想学python 这5本书籍你必看!
Dec 11 #Python
对python中数据集划分函数StratifiedShuffleSplit的使用详解
Dec 11 #Python
Python3爬虫学习入门教程
Dec 11 #Python
Python3实现爬取简书首页文章标题和文章链接的方法【测试可用】
Dec 11 #Python
You might like
php开发过程中关于继承的使用方法分享
2011/06/17 PHP
深入mysql_fetch_row()与mysql_fetch_array()的区别详解
2013/06/05 PHP
变量在 PHP7 内部的实现(一)
2015/12/21 PHP
PHP长网址与短网址的实现方法
2017/10/13 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
PHP设计模式之注册树模式分析
2018/01/26 PHP
js 数组操作代码集锦
2009/04/28 Javascript
为指定元素增加样式的js代码
2009/12/09 Javascript
jQuery 页面 Mask实现代码
2010/01/09 Javascript
15条JavaScript最佳实践小结
2013/08/09 Javascript
JS正则表达式验证数字代码
2014/01/28 Javascript
jQuery中outerHeight()方法用法实例
2015/01/19 Javascript
jQuery浏览器CSS3特写兼容实例
2015/01/19 Javascript
实例讲解javascript注册事件处理函数
2016/01/09 Javascript
Angular2 组件通信的实例代码
2017/06/23 Javascript
Bootstrap Table 删除和批量删除
2017/09/22 Javascript
jquery ajax加载数据前台渲染方式 不用for遍历的方法
2018/08/09 jQuery
Vue+ElementUI使用vue-pdf实现预览功能
2019/11/26 Javascript
vuex分模块后,实现获取state的值
2020/07/26 Javascript
vue keep-alive实现多组件嵌套中个别组件存活不销毁的操作
2020/10/30 Javascript
nuxt静态部署打包相对路径操作
2020/11/06 Javascript
[49:43]VG vs FNATIC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python和shell实现的校验IP地址合法性脚本分享
2014/10/23 Python
浅谈Python traceback的优雅处理
2018/08/31 Python
用python3教你任意Html主内容提取功能
2018/11/05 Python
Django实现跨域请求过程详解
2019/07/25 Python
python批量图片处理简单示例
2019/08/06 Python
Python3标准库glob文件名模式匹配的问题
2020/03/13 Python
俄罗斯第一家篮球店:StreetBall
2020/07/30 全球购物
领导视察欢迎词
2014/01/15 职场文书
中学生学雷锋演讲稿
2014/04/26 职场文书
房产证明范本
2015/06/19 职场文书
地震捐款简报
2015/07/21 职场文书
zabbix监控mysql的实例方法
2021/06/02 MySQL
5个实用的JavaScript新特性
2022/06/16 Javascript
CSS SandBox应用场景及常见问题
2022/06/25 HTML / CSS