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使用Flask框架获取用户IP地址的方法
Mar 21 Python
python字符串编码识别模块chardet简单应用
Jun 15 Python
python实现简单爬虫功能的示例
Oct 24 Python
Python中如何优雅的合并两个字典(dict)方法示例
Aug 09 Python
python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别
Jun 04 Python
解决python xlrd无法读取excel文件的问题
Dec 25 Python
10款最好的Python开发编辑器
Jul 03 Python
Python实现分数序列求和
Feb 25 Python
使用python的turtle函数绘制一个滑稽表情
Feb 28 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
May 23 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
Aug 28 Python
python使用pygame创建精灵Sprite
Apr 06 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
造势之举?韩国总统候选人发布《星际争霸》地图
2017/04/22 星际争霸
文章推荐系统(三)
2006/10/09 PHP
Access数据库导入Mysql的方法之一
2006/10/09 PHP
解析PHP中一些可能会被忽略的问题
2013/06/21 PHP
Codeigniter(CI)框架分页函数及相关知识
2014/11/03 PHP
PHP文件系统管理(实例讲解)
2017/09/19 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
2019/08/23 PHP
jQuery+PHP实现图片上传并提交功能
2020/07/27 PHP
jquery插件开发方法(初学者)
2012/02/03 Javascript
在jQuery中 关于json空对象筛选替换
2013/04/15 Javascript
JavaScript对内存分配及管理机制详细解析
2013/11/11 Javascript
Javascript节点关系实例分析
2015/05/15 Javascript
jQuery过滤HTML标签并高亮显示关键字的方法
2015/08/07 Javascript
JS+CSS实现经典的左侧竖向滑动菜单效果
2015/09/23 Javascript
jQuery使用正则表达式替换dom元素标签用法示例
2017/01/16 Javascript
基于vue2实现左滑删除功能
2017/11/28 Javascript
基于Vue开发数字输入框组件
2017/12/19 Javascript
关于React动态加载路由处理的相关问题
2019/01/07 Javascript
Vue+Element实现网页版个人简历系统(推荐)
2019/12/31 Javascript
JS 设计模式之:单例模式定义与实现方法浅析
2020/05/06 Javascript
jQuery 选择方法及$(this)用法实例分析
2020/05/19 jQuery
VUE使用 wx-open-launch-app 组件开发微信打开APP功能
2020/08/11 Javascript
[02:51]2014DOTA2国际邀请赛 IG战队官方纪录片
2014/07/21 DOTA
python OpenCV学习笔记实现二维直方图
2018/02/08 Python
python使用pandas处理大数据节省内存技巧(推荐)
2019/05/05 Python
Django模型序列化返回自然主键值示例代码
2019/06/12 Python
Python 合并多个TXT文件并统计词频的实现
2019/08/23 Python
python socket通信编程实现文件上传代码实例
2019/12/14 Python
python飞机大战游戏实例讲解
2020/12/04 Python
玩具公司的创业计划书
2013/12/31 职场文书
大学生感恩父母演讲稿
2014/08/28 职场文书
如何写股份合作协议书
2014/09/11 职场文书
作风建设整改方案
2014/10/27 职场文书
体育教师个人工作总结
2015/02/09 职场文书
常用的Python代码调试工具总结
2021/06/23 Python
Redis高并发防止秒杀超卖实战源码解决方案
2021/11/01 Redis