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 open读写文件实现脚本
Sep 06 Python
使用Python编写简单的画图板程序的示例教程
Dec 08 Python
python检查URL是否正常访问的小技巧
Feb 25 Python
Python模拟登陆实现代码
Jun 14 Python
Python实现找出数组中第2大数字的方法示例
Mar 26 Python
python GUI实现小球满屏乱跑效果
May 09 Python
python中几种自动微分库解析
Aug 29 Python
Python+OpenCV实现旋转文本校正方式
Jan 09 Python
python-OpenCV 实现将数组转换成灰度图和彩图
Jan 09 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
Apr 22 Python
python的scipy.stats模块中正态分布常用函数总结
Feb 19 Python
Python xlwings插入Excel图片的实现方法
Feb 26 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 在5.1.* 和5.2.*之间 PDO数据库操作中的不同之处小结
2012/03/07 PHP
PHP实现根据浏览器跳转不同语言页面代码
2013/08/02 PHP
微信扫描二维码登录网站代码示例
2013/12/30 PHP
ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
2014/07/22 PHP
php生成酷炫的四个字符验证码
2016/04/22 PHP
phpmyadmin下载、安装、配置教程
2017/05/16 PHP
求得div 下 img的src地址的js代码
2007/02/28 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件。
2011/12/26 Javascript
js和as的稳定传值问题解决
2013/07/14 Javascript
使用CSS和jQuery模拟select并附提交后取得数据的代码
2013/10/18 Javascript
javascript监听鼠标滚轮事件浅析
2014/06/05 Javascript
浅谈javascript中call()、apply()、bind()的用法
2015/04/20 Javascript
浅谈document.write()输出样式
2015/05/07 Javascript
JavaScript实现标题栏文字轮播效果代码
2015/10/24 Javascript
Vue.js每天必学之构造器与生命周期
2016/09/05 Javascript
BootstrapValidator不触发校验的实现代码
2016/09/28 Javascript
JS 实现计算器详解及实例代码(一)
2017/01/08 Javascript
微信小程序中子页面向父页面传值实例详解
2017/03/20 Javascript
详解webpack 多页面/入口支持&公共组件单独打包
2017/06/29 Javascript
详解Angular Reactive Form 表单验证
2017/07/06 Javascript
浅谈vue引入css,less遇到的坑和解决方法
2018/01/20 Javascript
微信小程序模板(template)使用详解
2018/01/31 Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
2019/08/28 Javascript
基于vue实现图片验证码倒计时60s功能
2019/12/10 Javascript
python远程登录代码
2008/04/29 Python
python使用wxpython开发简单记事本的方法
2015/05/20 Python
python 自动化将markdown文件转成html文件的方法
2016/09/23 Python
Python 多进程和数据传递的理解
2017/10/09 Python
Python实现批量读取图片并存入mongodb数据库的方法示例
2018/04/02 Python
Python 爬虫之Beautiful Soup模块使用指南
2018/07/05 Python
TensorFlow加载模型时出错的解决方式
2020/02/06 Python
python 浮点数四舍五入需要注意的地方
2020/08/18 Python
共产党员公开承诺书
2014/03/25 职场文书
2014年销售工作总结范文
2014/12/01 职场文书
心术观后感
2015/06/11 职场文书
Java实现带图形界面的聊天程序
2022/06/10 Java/Android