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网络编程学习笔记(九):数据库客户端 DB-API
Jun 09 Python
python进阶教程之异常处理
Aug 30 Python
Python中的对象,方法,类,实例,函数用法分析
Jan 15 Python
Python多线程编程(二):启动线程的两种方法
Apr 05 Python
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
Jan 20 Python
Python文件的读写和异常代码示例
Oct 31 Python
详解Python3迁移接口变化采坑记
Oct 11 Python
python实现根据文件格式分类
Oct 31 Python
Python requests模块cookie实例解析
Apr 14 Python
Django Channel实时推送与聊天的示例代码
Apr 30 Python
Python tkinter界面实现历史天气查询的示例代码
Aug 23 Python
Pytorch中expand()的使用(扩展某个维度)
Jul 15 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
对象失去焦点时自己动提交数据的实现代码
2012/11/06 PHP
php常用Stream函数集介绍
2013/06/24 PHP
9个经典的PHP代码片段分享
2014/12/18 PHP
FileUpload 控件 禁止手动输入或粘贴的实现代码
2010/04/07 Javascript
禁止js文件缓存的代码
2010/04/09 Javascript
用JQuery实现表格隔行变色和突出显示当前行的代码
2012/02/10 Javascript
JS+flash实现chrome和ie浏览器下同时可以复制粘贴
2013/09/22 Javascript
Google (Local) Search API的简单使用介绍
2013/11/28 Javascript
同域jQuery(跨)iframe操作DOM(实例讲解)
2013/12/19 Javascript
Google 地图叠加层实例讲解
2016/08/06 Javascript
Jquery与Bootstrap实现后台管理页面增删改查功能示例
2017/01/22 Javascript
详谈for循环里面的break和continue语句
2017/07/20 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
2018/02/02 jQuery
微信小程序实现自定义modal弹窗封装的方法
2018/06/15 Javascript
如何给element添加一个抽屉组件的方法步骤
2019/07/14 Javascript
vue prop属性传值与传引用示例
2019/11/13 Javascript
js实现弹窗猜数字游戏
2020/11/26 Javascript
[40:50]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第四场
2014/05/24 DOTA
python实现猜数字游戏(无重复数字)示例分享
2014/03/29 Python
PyQt5每天必学之单行文本框
2018/04/19 Python
Python实现制度转换(货币,温度,长度)
2019/07/14 Python
python网络编程之多线程同时接受和发送
2019/09/03 Python
python程序中的线程操作 concurrent模块使用详解
2019/09/23 Python
Pandas聚合运算和分组运算的实现示例
2019/10/17 Python
详解python中的闭包
2020/09/07 Python
MoviePy常用剪辑类及Python视频剪辑自动化
2020/12/18 Python
欧洲最大的美妆零售网站:Feelunique
2017/01/14 全球购物
营销与策划个人求职信
2013/09/22 职场文书
自我鉴定的范文
2013/10/03 职场文书
单位提档介绍信
2014/01/17 职场文书
还款承诺书范文
2014/05/20 职场文书
公司运动会策划方案
2014/05/25 职场文书
2014学校领导四风对照检查材料思想汇报
2014/09/23 职场文书
2015年党建工作目标责任书
2015/05/08 职场文书
简述Java中throw-throws异常抛出
2021/08/07 Java/Android
Java后端 Dubbo retries 超时重试机制的解决方案
2022/04/14 Java/Android