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中的装饰器的用法
Apr 24 Python
Python实现删除当前目录下除当前脚本以外的文件和文件夹实例
Jul 27 Python
Python浅复制中对象生存周期实例分析
Apr 02 Python
python之文件读取一行一行的方法
Jul 12 Python
如何用Python实现简单的Markdown转换器
Jul 16 Python
Python中反射和描述器总结
Sep 23 Python
实例分析python3实现并发访问水平切分表
Sep 29 Python
Python 3 实现定义跨模块的全局变量和使用教程
Jul 07 Python
学python安装的软件总结
Oct 12 Python
Python使用pdb调试代码的技巧
May 03 Python
django 模型中的计算字段实例
May 19 Python
Python实现疫情地图可视化
Feb 05 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 MSSQL 存储过程的方法
2008/12/24 PHP
PHP JSON 数据解析代码
2010/05/26 PHP
PHP关键特性之命名空间实例详解
2017/05/06 PHP
PHP去除空数组且数组键名重置的讲解
2019/02/28 PHP
javascript之querySelector和querySelectorAll使用说明
2011/10/09 Javascript
用JavaScript仿PS里的羽化效果代码
2011/12/20 Javascript
详解JavaScript ES6中的模板字符串
2015/07/28 Javascript
AngularJs解决跨域问题案例详解(简单方法)
2016/05/19 Javascript
jquery插件锦集【推荐】
2016/12/16 Javascript
Vue2学习笔记之请求数据交互vue-resource
2017/02/23 Javascript
简单实现jQuery弹幕效果
2017/05/06 jQuery
springmvc接收jquery提交的数组数据代码分享
2017/10/28 jQuery
使用FileReader API创建Vue文件阅读器组件
2018/04/03 Javascript
Vue进度条progressbar组件功能
2018/04/17 Javascript
微信小程序基础教程之worker线程的使用方法
2019/07/15 Javascript
Vue函数式组件的应用实例详解
2019/08/30 Javascript
VUE实现强制渲染,强制更新
2019/10/29 Javascript
vue实现element表格里表头信息提示功能(推荐)
2019/11/20 Javascript
JS实现点击下拉列表文本框中出现对应的网址,点击跳转按钮实现跳转
2019/11/25 Javascript
JS实现电商商品展示放大镜特效
2020/01/07 Javascript
JavaScript实现与web通信的方法详解
2020/08/07 Javascript
[01:19:23]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第二场
2018/04/06 DOTA
[34:41]夜魇凡尔赛茶话会 第二期02:你画我猜
2021/03/11 DOTA
总结Python编程中三条常用的技巧
2015/05/11 Python
python多线程调用exit无法退出的解决方法
2019/02/18 Python
Python实现二叉树前序、中序、后序及层次遍历示例代码
2019/05/18 Python
python脚本调用iftop 统计业务应用流量的思路详解
2019/10/11 Python
python给list排序的简单方法
2020/12/10 Python
python中实现栈的三种方法
2020/12/19 Python
使用css实现android系统的loading加载动画
2019/07/25 HTML / CSS
IE9下html5初试小刀
2010/09/21 HTML / CSS
党的生日演讲稿
2014/09/10 职场文书
大学毕业生自我鉴定范文
2019/06/21 职场文书
mysql批量新增和存储的方法实例
2021/04/07 MySQL
python 利用PyAutoGUI快速构建自动化操作脚本
2021/05/31 Python
python 闭包函数详细介绍
2022/04/19 Python