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 01 Python
构建Python包的五个简单准则简介
Jun 15 Python
在Django的视图(View)外使用Session的方法
Jul 23 Python
Python编程中对super函数的正确理解和用法解析
Jul 02 Python
Python 运行 shell 获取输出结果的实例
Jan 07 Python
python3.7 的新特性详解
Jul 25 Python
python多任务之协程的使用详解
Aug 26 Python
python函数定义和调用过程详解
Feb 09 Python
Python API len函数操作过程解析
Mar 05 Python
使用Python获取当前工作目录和执行命令的位置
Mar 09 Python
Pymysql实现往表中插入数据过程解析
Jun 02 Python
Python大批量搜索引擎图像爬虫工具详解
Nov 16 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
Zend公司全球首推PHP认证
2006/10/09 PHP
PHP的一个基础知识 表单提交
2011/07/04 PHP
discuz程序的PHP加密函数原理分析
2011/08/05 PHP
PHP中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码
2013/02/14 PHP
PHP使用zlib扩展实现GZIP压缩输出的方法详解
2018/04/09 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
2019/01/17 PHP
PHP 计算至少是其他数字两倍的最大数的实现代码
2020/05/26 PHP
找到一点可怜的关于dojo资料,谢谢作者!
2006/12/06 Javascript
jQuery语法总结和注意事项小结
2012/11/11 Javascript
jquery列表拖动排列(由项目提取相当好用)
2014/06/17 Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
2015/12/23 Javascript
值得分享的bootstrap table实例
2016/09/22 Javascript
d3.js实现简单的网络拓扑图实例代码
2016/11/06 Javascript
vue-router实现webApp切换页面动画效果代码
2017/05/25 Javascript
ECMAscript 变量作用域总结概括
2017/08/18 Javascript
JsonServer安装及启动过程图解
2020/02/28 Javascript
微信小程序之滑动页面隐藏和显示组件功能的实现代码
2020/06/19 Javascript
vue 全局封装loading加载教程(全局监听)
2020/11/05 Javascript
[01:03:38]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS CIS
2014/05/22 DOTA
Python爬虫实例_城市公交网络站点数据的爬取方法
2018/01/10 Python
使用python实现链表操作
2018/01/26 Python
Tensorflow使用tfrecord输入数据格式
2018/06/19 Python
python多行字符串拼接使用小括号的方法
2020/03/19 Python
利用Python如何批量修改数据库执行Sql文件
2018/07/29 Python
Python 读取WAV音频文件 画频谱的实例
2020/03/14 Python
CSS3制作半透明边框(Facebox)类似渐变
2012/12/09 HTML / CSS
基于HTML5+Webkit实现树叶飘落动画
2017/12/28 HTML / CSS
PHP如何调用MYSQL存储过程
2014/05/30 面试题
网络安全方面的面试题
2016/01/07 面试题
自主招生自荐书
2013/11/29 职场文书
二年级学生评语大全
2014/04/23 职场文书
2014乡党委副书记党建工作汇报材料
2014/11/02 职场文书
通知格式
2015/04/27 职场文书
2015年董事长秘书工作总结
2015/07/23 职场文书
python中os.path.join()函数实例用法
2021/05/26 Python
mysql定时自动备份数据库的方法步骤
2021/07/07 MySQL