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入门之三角函数全解【收藏】
Nov 08 Python
Python实现的将文件每一列写入列表功能示例【测试可用】
Mar 19 Python
Python numpy 提取矩阵的某一行或某一列的实例
Apr 03 Python
解决vscode python print 输出窗口中文乱码的问题
Dec 03 Python
python实现自动解数独小程序
Jan 21 Python
Python Lambda函数使用总结详解
Dec 11 Python
pytorch dataloader 取batch_size时候出现bug的解决方式
Feb 20 Python
Django中文件上传和文件访问微项目的方法
Apr 27 Python
解决keras模型保存h5文件提示无此目录问题
Jul 01 Python
Python优秀开源项目Rich源码解析的流程分析
Jul 06 Python
教你怎么用Python监控愉客行车程
Apr 29 Python
如何Python使用re模块实现okenizer
Apr 30 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(6) 面向对象
2010/02/16 PHP
javascript 学习笔记(八)javascript对象
2011/04/12 Javascript
html5的自定义data-*属性和jquery的data()方法的使用示例
2013/08/21 Javascript
Javascript闭包用法实例分析
2015/01/23 Javascript
JavaScript中用于生成随机数的Math.random()方法
2015/06/15 Javascript
js+css实现有立体感的按钮式文字竖排菜单效果
2015/09/01 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(二)
2016/02/16 Javascript
javascript的几种继承方法介绍
2016/03/22 Javascript
VUEJS实战之构建基础并渲染出列表(1)
2016/06/13 Javascript
JS提示:Uncaught SyntaxError: Unexpected token ILLEGAL错误的解决方法
2016/08/19 Javascript
原生JS实现列表子元素顺序反转的方法分析
2018/07/02 Javascript
微信小程序之多列表的显示和隐藏功能【附源码】
2018/08/06 Javascript
解决bootstrap-select 动态加载数据不显示的问题
2018/08/10 Javascript
vue升级之路之vue-router的使用教程
2018/08/14 Javascript
详解Vue的常用指令v-if, v-for, v-show,v-else, v-bind, v-on
2018/10/12 Javascript
基于vue.js组件实现分页效果
2018/12/29 Javascript
实例介绍JavaScript中多种组合继承
2019/01/20 Javascript
VUE v-model表单数据双向绑定完整示例
2019/01/21 Javascript
详解JavaScript栈内存与堆内存
2019/04/04 Javascript
基于iview的router常用控制方式
2019/05/30 Javascript
ES6 proxy和reflect的使用方法与应用实例分析
2020/02/15 Javascript
vue-amap根据地址回显地图并mark的操作
2020/11/03 Javascript
基于JavaScript实现轮播图效果
2021/01/02 Javascript
python使用paramiko实现远程拷贝文件的方法
2016/04/18 Python
在Python程序员面试中被问的最多的10道题
2017/12/05 Python
Python基于递归算法实现的汉诺塔与Fibonacci数列示例
2018/04/18 Python
Python 存储字符串时节省空间的方法
2019/04/23 Python
Python Des加密解密如何实现软件注册码机器码
2020/01/08 Python
django 模型中的计算字段实例
2020/05/19 Python
提高EJB性能都有哪些技巧
2012/03/25 面试题
大唐面试试题(CPU,UNIX等等)
2012/01/11 面试题
九年级化学教学反思
2014/01/28 职场文书
中学生个人自我评价
2014/02/06 职场文书
捐款通知怎么写
2015/04/24 职场文书
Python控制台输出俄罗斯方块的方法实例
2021/04/17 Python
Spring Boot 使用 Spring-Retry 进行重试框架
2022/04/24 Java/Android