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 相关文章推荐
利用QT写一个极简单的图形化Python闹钟程序
Apr 07 Python
教大家使用Python SqlAlchemy
Feb 12 Python
python实现汉诺塔方法汇总
Jul 25 Python
Pyspider中给爬虫伪造随机请求头的实例
May 07 Python
python的concat等多种用法详解
Nov 28 Python
python接口自动化测试之接口数据依赖的实现方法
Apr 26 Python
Django时区详解
Jul 24 Python
Python selenium 自动化脚本打包成一个exe文件(推荐)
Jan 14 Python
Python求两个字符串最长公共子序列代码实例
Mar 05 Python
python框架flask入门之环境搭建及开启调试
Jun 07 Python
深入分析python 排序
Aug 24 Python
python中pandas对多列进行分组统计的实现
Jun 18 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 中英文混合排版中处理字符串常用的函数
2007/04/12 PHP
php中array_slice和array_splice函数解析
2016/10/18 PHP
Prototype使用指南之selector.js
2007/01/10 Javascript
Javascript 中的类和闭包
2010/01/08 Javascript
idTabs基于JQuery的根据URL参数选择Tab插件
2012/04/11 Javascript
js切换div css注意的细节
2012/12/10 Javascript
jquery中focus()函数实现当对象获得焦点后自动把光标移到内容最后
2013/09/29 Javascript
jquery form 加载数据示例
2014/04/21 Javascript
JQuery中ajax方法访问web服务实例
2015/07/18 Javascript
微信小程序  TLS 版本必须大于等于1.2问题解决
2017/02/22 Javascript
js实现数组和对象的深浅拷贝
2017/09/30 Javascript
基于jQuery解决ios10以上版本缩放问题
2017/11/03 jQuery
在Vuex使用dispatch和commit来调用mutations的区别详解
2018/09/18 Javascript
关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法
2018/12/09 Javascript
基于AngularJS拖拽插件ngDraggable.js实现拖拽排序功能
2019/04/02 Javascript
JS页面获取 session 值,作用域和闭包学习笔记
2019/10/16 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
2019/11/05 Javascript
vue element-ui中table合计指定列求和实例
2020/11/02 Javascript
webpack4从0搭建组件库的实现
2020/11/29 Javascript
Python读取网页内容的方法
2015/07/30 Python
Python建立Map写Excel表实例解析
2018/01/17 Python
基于python 二维数组及画图的实例详解
2018/04/03 Python
Python for循环与range函数的使用详解
2019/03/23 Python
python plotly绘制直方图实例详解
2019/07/22 Python
django中media媒体路径设置的步骤
2019/11/15 Python
TensorFLow 不同大小图片的TFrecords存取实例
2020/01/20 Python
纯CSS3实现扇形动画菜单(简化版)实例源码
2017/01/17 HTML / CSS
CSS3 实现童年的纸飞机
2019/05/05 HTML / CSS
中科方德软件测试面试题
2016/04/21 面试题
中科前程Java笔试题
2016/11/20 面试题
挖掘机司机岗位职责
2014/02/12 职场文书
搞笑征婚广告词
2014/03/17 职场文书
2015年大学学生会工作总结
2015/05/13 职场文书
HTML+VUE分页实现炫酷物联网大屏功能
2021/05/27 Vue.js
Python中Selenium对Cookie的操作方法
2021/07/09 Python
《辉夜大小姐想让我告白》第三季正式预告
2022/03/20 日漫