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多线程和队列操作实例
Jun 21 Python
python对json的相关操作实例详解
Jan 04 Python
Python调用ctypes使用C函数printf的方法
Aug 23 Python
用Python实现随机森林算法的示例
Aug 24 Python
Pandas标记删除重复记录的方法
Apr 08 Python
Python重新加载模块的实现方法
Oct 16 Python
对Python中plt的画图函数详解
Nov 07 Python
基于python修改srt字幕的时间轴
Feb 03 Python
python3光学字符识别模块tesserocr与pytesseract的使用详解
Feb 26 Python
在Python中实现字典反转案例
Dec 05 Python
python-图片流传输的思路及示例(url转换二维码)
Dec 21 Python
Python实现自动玩连连看的脚本分享
Apr 04 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中的串行化变量和序列化对象
2006/09/05 PHP
php curl基本操作详解
2013/07/23 PHP
php列出mysql表所有行和列的方法
2015/03/13 PHP
php实现的一段简单概率相关代码
2016/05/30 PHP
PHP开发实现快递查询功能详解
2019/04/08 PHP
Javascript下的keyCode键码值表
2007/04/10 Javascript
使用JS 清空File控件的路径值
2013/07/08 Javascript
JavaScript中innerHTML,innerText,outerHTML的用法及区别
2015/09/01 Javascript
javascript每日必学之封装
2016/02/23 Javascript
JavaScript中的boolean布尔值使用学习及相关技巧讲解
2016/05/26 Javascript
使用three.js 画渐变的直线
2016/06/05 Javascript
基于JS设计12306登录页面
2016/12/28 Javascript
Bootstrap弹出框(Popover)被挤压的问题小结
2017/07/11 Javascript
详解A标签中href=""的几种用法
2017/08/20 Javascript
在Vuex使用dispatch和commit来调用mutations的区别详解
2018/09/18 Javascript
详解vue中this.$emit()的返回值是什么
2019/04/07 Javascript
python自动zip压缩目录的方法
2015/06/28 Python
解决Django migrate不能发现app.models的表问题
2019/08/31 Python
Python测试线程应用程序过程解析
2019/12/31 Python
屏蔽Django admin界面添加按钮的操作
2020/03/11 Python
使用pygame实现垃圾分类小游戏功能(已获校级二等奖)
2020/07/23 Python
基于css3 animate制作绚丽的动画效果
2015/11/24 HTML / CSS
苏格兰销售女装、男装和童装的连锁店:M&Co
2018/03/16 全球购物
工程力学专业毕业生求职信
2013/10/06 职场文书
员工拓展培训方案
2014/02/15 职场文书
投标文件签署授权委托书范本
2014/10/12 职场文书
社区灵活就业证明
2014/11/03 职场文书
2014年乡镇安全生产工作总结
2014/12/02 职场文书
2014年中职班主任工作总结
2014/12/16 职场文书
六年级小学生评语
2014/12/26 职场文书
体育个人工作总结
2015/02/09 职场文书
清明节寄语2015
2015/03/23 职场文书
2015年高三班主任工作总结
2015/05/21 职场文书
2016年秋季运动会加油稿
2015/12/21 职场文书
职业生涯规划书之大学四年
2019/08/07 职场文书
winserver2019安装软件一直卡在应用程序正在为首次使用做准备
2022/06/10 Servers