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 相关文章推荐
Scrapy框架CrawlSpiders的介绍以及使用详解
Nov 29 Python
python实现二叉查找树实例代码
Feb 08 Python
numpy找出array中的最大值,最小值实例
Apr 03 Python
PyCharm代码格式调整方法
May 23 Python
numpy给array增加维度np.newaxis的实例
Nov 01 Python
Python爬虫设置代理IP(图文)
Dec 23 Python
python实现微信防撤回神器
Apr 29 Python
Django-Model数据库操作(增删改查、连表结构)详解
Jul 17 Python
python并发编程多进程之守护进程原理解析
Aug 20 Python
复化梯形求积分实例——用Python进行数值计算
Nov 20 Python
python调用函数、类和文件操作简单实例总结
Nov 29 Python
Python响应对象text属性乱码解决方案
Mar 31 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 分页原理详解
2009/08/21 PHP
PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
2014/06/09 PHP
ThinkPHP入库出现两次反斜线转义及数据库类转义的解决方法
2014/11/04 PHP
一文掌握PHP Xdebug 本地与远程调试(小结)
2019/04/23 PHP
php实现的表单验证类完整示例
2019/08/13 PHP
随机显示经典句子或诗歌的javascript脚本
2007/08/04 Javascript
Js 订制自己的AlertBox(信息提示框)
2009/01/09 Javascript
jQuery中的常用事件总结
2009/12/27 Javascript
JavaScript与DropDownList 区别分析
2010/01/01 Javascript
JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合
2010/01/12 Javascript
Wordpress ThickBox 点击图片显示下一张图的修改方法
2010/12/11 Javascript
javascript针对DOM的应用分析(三)
2012/04/15 Javascript
轻松创建nodejs服务器(10):处理上传图片
2014/12/18 NodeJs
jQuery获得指定元素坐标的方法
2015/04/14 Javascript
基于jQuery实现的菜单切换效果
2015/10/16 Javascript
jQuery实现的多滑动门,多选项卡效果代码
2016/03/28 Javascript
js学习阶段总结(必看篇)
2016/06/16 Javascript
jQuery Easyui Datagrid实现单行的上移下移及保存移动的结果
2016/08/15 Javascript
JavaScript  event对象整理及详细介绍
2016/10/10 Javascript
jQuery的$.extend 浅拷贝与深拷贝
2017/03/08 Javascript
Angular中实现树形结构视图实例代码
2017/05/05 Javascript
微信小程序实现下载进度条的方法
2017/12/08 Javascript
微信小程序导航栏跟随滑动效果的实现代码
2019/05/14 Javascript
浅谈layui 绑定form submit提交表单的注意事项
2019/10/25 Javascript
js实现数字跳动到指定数字
2020/08/25 Javascript
python函数局部变量用法实例分析
2015/08/04 Python
python模糊图片过滤的方法
2018/12/14 Python
Python3+Pycharm+PyQt5环境搭建步骤图文详解
2019/05/29 Python
基于keras输出中间层结果的2种实现方式
2020/01/24 Python
python 多线程爬取壁纸网站的示例
2021/02/20 Python
HTML5移动端开发遇见的东西
2019/10/11 HTML / CSS
学前教育求职自荐信范文
2013/12/25 职场文书
标准化管理实施方案
2014/02/25 职场文书
2015年教师节主持词
2015/07/03 职场文书
2019年大学毕业生个人自我鉴定范文大全
2019/03/21 职场文书
详解overflow:hidden的作用(溢出隐藏、清除浮动、解决外边距塌陷)
2021/07/01 HTML / CSS