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 Trie树实现字典排序
Mar 28 Python
详解Python中的文本处理
Apr 11 Python
python中学习K-Means和图片压缩
Nov 20 Python
解决tensorflow模型参数保存和加载的问题
Jul 26 Python
Python分割指定页数的pdf文件方法
Oct 26 Python
基于python指定包的安装路径方法
Oct 27 Python
在Pycharm中将pyinstaller加入External Tools的方法
Jan 16 Python
Python自定义一个异常类的方法
Jun 27 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
Sep 10 Python
python读写Excel表格的实例代码(简单实用)
Dec 19 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
May 27 Python
宝塔更新Python及Flask项目的部署
Apr 11 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获取给定日期相差天数的方法分析
2017/02/20 PHP
Thinkphp5.0 框架实现控制器向视图view赋值及视图view取值操作示例
2019/10/12 PHP
Laravel使用模型实现like模糊查询的例子
2019/10/24 PHP
javascript 动态数据下的锚点错位问题解决方法
2008/12/24 Javascript
javascript动画浅析
2012/08/30 Javascript
JQuery判断checkbox是否选中及其它复选框操作方法合集
2015/06/01 Javascript
artDialog+plupload实现多文件上传
2016/07/19 Javascript
Javascript动画效果(1)
2016/10/11 Javascript
BootStrap实现轮播图效果(收藏)
2016/12/30 Javascript
JavaScript初学者必看“new”
2017/06/12 Javascript
angularjs实现过滤并替换关键字小功能
2017/09/19 Javascript
JavaScript继承的特性与实践应用深入详解
2018/12/30 Javascript
利用百度echarts实现图表功能简单入门示例【附源码下载】
2019/06/10 Javascript
解决Vue动态加载本地图片问题
2019/10/09 Javascript
vue+elementUI组件table实现前端分页功能
2020/11/15 Javascript
解决element-ui里的下拉多选框 el-select 时,默认值不可删除问题
2020/08/14 Javascript
[02:19]DOTA2上海特级锦标赛 观赛指南 Spectator Guide
2016/02/04 DOTA
Python之list对应元素求和的方法
2018/06/28 Python
python绘制直线的方法
2018/06/30 Python
Python迭代器与生成器基本用法分析
2018/07/26 Python
Python3非对称加密算法RSA实例详解
2018/12/06 Python
python numpy实现文件存取的示例代码
2019/05/26 Python
pytorch对梯度进行可视化进行梯度检查教程
2020/02/04 Python
解决Keras中CNN输入维度报错问题
2020/06/29 Python
解决TensorFlow调用Keras库函数存在的问题
2020/07/06 Python
css3实现简单的白云飘动背景特效
2020/10/28 HTML / CSS
荣耀俄罗斯官网:HONOR俄罗斯
2020/10/31 全球购物
Columbia Sportswear法国官网:全球户外品牌
2020/09/25 全球购物
行政经理岗位职责
2013/11/09 职场文书
个人培训自我鉴定
2014/03/28 职场文书
教师查摆问题自查报告
2014/10/11 职场文书
2014年女职工工作总结
2014/11/27 职场文书
2015年城管个人工作总结范文
2015/04/20 职场文书
Python insert() / append() 用法 Leetcode实战演示
2021/03/31 Python
python 经纬度求两点距离、三点面积操作
2021/06/03 Python
Nginx缓存设置案例详解
2021/09/15 Servers