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实现根据指定端口探测服务器/模块部署的方法
Aug 25 Python
django模型中的字段和model名显示为中文小技巧分享
Nov 18 Python
Python fileinput模块使用实例
Jun 03 Python
TensorFlow入门使用 tf.train.Saver()保存模型
Apr 24 Python
Python简单实现网页内容抓取功能示例
Jun 07 Python
Python OpenCV处理图像之图像像素点操作
Jul 10 Python
python实现简单银行管理系统
Oct 25 Python
Matplotlib scatter绘制散点图的方法实现
Jan 02 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
Jan 10 Python
python如何通过twisted搭建socket服务
Feb 03 Python
python logging.info在终端没输出的解决
May 12 Python
python excel多行合并的方法
Dec 09 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页面消耗内存过大的处理办法
2013/03/18 PHP
easyui的tabs update正确用法分享
2014/03/21 PHP
简单说说PHP优化那些事(经验分享)
2014/11/27 PHP
Symfony学习十分钟入门经典教程
2016/02/03 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
PHP 多任务秒级定时器的实现方法
2018/05/13 PHP
JavaScript 基础问答三
2008/12/03 Javascript
javascript同页面多次调用弹出层具体实例代码
2013/08/16 Javascript
jQuery动态添加删除select项(实现代码)
2013/09/03 Javascript
js调用图片隐藏&显示实现代码
2013/09/13 Javascript
使用js获取图片原始尺寸
2014/12/03 Javascript
jquery 设置style:display的方法
2015/01/29 Javascript
javascript常用经典算法实例详解
2015/11/25 Javascript
原生js实现对Ajax的封装(仿jquery)
2017/01/22 Javascript
vue-router实现tab标签页(单页面)详解
2017/10/17 Javascript
React优化子组件render的使用
2019/05/12 Javascript
Vue+Java+Base64实现条码解析的示例
2020/09/23 Javascript
jQuery实现本地存储
2020/12/22 jQuery
python self,cls,decorator的理解
2009/07/13 Python
python在控制台输出进度条的方法
2015/06/20 Python
利用python发送和接收邮件
2016/09/27 Python
Python 查看文件的读写权限方法
2018/01/23 Python
使用python读取txt文件的内容,并删除重复的行数方法
2018/04/18 Python
Python 获取numpy.array索引值的实例
2019/12/06 Python
python实现简单日志记录库glog的使用
2019/12/13 Python
使用Django搭建网站实现商品分页功能
2020/05/22 Python
前端H5 Video常见使用场景简介
2020/08/21 HTML / CSS
俄罗斯眼镜网: optikaworld
2016/07/31 全球购物
Sunglasses Shop丹麦:欧洲第一的太阳镜在线销售网站
2017/10/22 全球购物
DataReader和DataSet的异同
2014/12/31 面试题
设计毕业生简历中的自我评价
2013/10/01 职场文书
法人授权委托书格式
2014/04/08 职场文书
教师查摆问题自查报告
2014/10/11 职场文书
mysql联合索引的使用规则
2021/06/23 MySQL
AJAX实现省市县三级联动效果
2021/10/16 Javascript
JS中forEach()、map()、every()、some()和filter()的用法
2022/05/11 Javascript