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使用reportlab画图示例(含中文汉字)
Dec 03 Python
Django在Win7下的安装及创建项目hello word简明教程
Jul 14 Python
用python代码做configure文件
Jul 20 Python
python中查看变量内存地址的方法
May 05 Python
如何优雅地改进Django中的模板碎片缓存详解
Jul 04 Python
django+xadmin+djcelery实现后台管理定时任务
Aug 14 Python
python使用pandas处理excel文件转为csv文件的方法示例
Jul 18 Python
对Django 中request.get和request.post的区别详解
Aug 12 Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
Feb 27 Python
Python基于pip实现离线打包过程详解
May 15 Python
解决keras backend 越跑越慢问题
Jun 18 Python
python opencv常用图形绘制方法(线段、矩形、圆形、椭圆、文本)
Apr 12 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代码
2010/07/17 PHP
php ci框架中加载css和js文件失败的原因及解决方法
2014/07/29 PHP
PHP链接MySQL的常用扩展函数
2014/10/23 PHP
Linux下 php7安装redis的方法
2018/11/01 PHP
laravel http 自定义公共验证和响应的方法
2019/09/29 PHP
JavaScript asp.net 获取当前超链接中的文本
2009/04/14 Javascript
深入理解javaScript中的事件驱动
2013/05/21 Javascript
javascript框架设计读书笔记之种子模块
2014/12/02 Javascript
jQuery实现类似老虎机滚动抽奖效果
2015/08/06 Javascript
javascript:void(0)点击登录没反应怎么解决
2015/11/13 Javascript
Bootstrap表单布局
2016/07/19 Javascript
JS中script标签defer和async属性的区别详解
2016/08/12 Javascript
jQuery实现鼠标经过时高亮,同时其他同级元素变暗的效果
2016/09/18 Javascript
easyUI实现类似搜索框关键词自动提示功能示例代码
2016/12/27 Javascript
vue2.0的contextmenu右键弹出菜单的实例代码
2017/07/24 Javascript
javascript按钮禁用和启用的效果实例代码
2017/10/29 Javascript
[06:44]2014DOTA2国际邀请赛-钥匙体育馆开战 开幕式振奋人心
2014/07/19 DOTA
使用PyV8在Python爬虫中执行js代码
2017/02/16 Python
Python批量查询域名是否被注册过
2017/06/21 Python
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
2018/06/28 Python
Linux下python3.6.1环境配置教程
2018/09/26 Python
python 实现多线程下载视频的代码
2019/11/15 Python
python os.path.isfile 的使用误区详解
2019/11/29 Python
解决Django Haystack全文检索为空的问题
2020/05/19 Python
Pycharm修改python路径过程图解
2020/05/22 Python
pytorch中 gpu与gpu、gpu与cpu 在load时相互转化操作
2020/05/25 Python
tensorflow 20:搭网络,导出模型,运行模型的实例
2020/05/26 Python
python批量处理多DNS多域名的nslookup解析实现
2020/06/28 Python
地球上最先进的胡子和头发修剪器:Bevel
2018/01/23 全球购物
开普敦通行证:Cape Town Pass
2019/07/18 全球购物
Windows和Linux动态库应用异同
2016/04/17 面试题
电教室标语
2014/06/20 职场文书
2014年小学班主任工作总结
2014/11/08 职场文书
导游词之无锡唐城
2019/12/12 职场文书
使用GO语言实现Mysql数据库CURD的简单示例
2021/08/07 Golang
JavaScript实现简单拖拽效果
2021/09/15 Javascript