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实现端口转发器的方法
Mar 13 Python
Python使用QRCode模块生成二维码实例详解
Jun 14 Python
python shell根据ip获取主机名代码示例
Nov 25 Python
Python数据分析中Groupby用法之通过字典或Series进行分组的实例
Dec 08 Python
python opencv实现旋转矩形框裁减功能
Jul 25 Python
python获取微信小程序手机号并绑定遇到的坑
Nov 19 Python
python如何查看微信消息撤回
Nov 27 Python
python matplotlib实现双Y轴的实例
Feb 12 Python
对Pytorch中Tensor的各种池化操作解析
Jan 03 Python
Python如何使用input函数获取输入
Aug 06 Python
Python使用Pygame绘制时钟
Nov 29 Python
python小型的音频操作库mp3Play
Apr 24 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中其实也可以用方法链
2011/11/10 PHP
PHP可逆加密/解密函数分享
2012/09/25 PHP
PHP中变量引用与变量销毁机制分析
2014/11/15 PHP
php中get_object_vars()方法用法实例
2015/02/08 PHP
PHP中使用curl入门教程
2015/07/02 PHP
Yii模型操作之criteria查找数据库的方法
2016/07/15 PHP
yii2高级应用之自定义组件实现全局使用图片上传功能的方法
2016/10/08 PHP
关于juqery radio写法的兼容性问题(新老版本jquery)
2010/06/14 Javascript
js中一个函数获取另一个函数返回值问题探讨
2013/11/21 Javascript
jQuery操作select下拉框的text值和value值的方法
2014/05/31 Javascript
用循环或if语句从json中取数据示例
2014/08/18 Javascript
JQuery实现动态表格点击按钮表格增加一行
2014/08/24 Javascript
JavaScript实现检查页面上的广告是否被AdBlock屏蔽了的方法
2014/11/03 Javascript
javascript判断复选框是否选中的方法
2015/10/16 Javascript
基于JS实现数字+字母+中文的混合排序方法
2016/06/06 Javascript
angular-ui-sortable实现可拖拽排序列表
2016/12/28 Javascript
node vue项目开发之前后端分离实战记录
2017/12/13 Javascript
在 Linux/Unix 中不重启 Vim 而重新加载 .vimrc 文件的流程
2018/03/21 Javascript
webpack4 optimization使用总结
2019/11/10 Javascript
0基础学习前端开发的一些建议
2020/07/14 Javascript
Python单例模式实例分析
2015/01/14 Python
Python 文件管理实例详解
2015/11/10 Python
Python中使用多进程来实现并行处理的方法小结
2017/08/09 Python
Python骚操作之动态定义函数
2019/03/26 Python
pybind11和numpy进行交互的方法
2019/07/04 Python
Python面向对象之私有属性和私有方法应用案例分析
2019/12/31 Python
python 动态渲染 mysql 配置文件的示例
2020/11/20 Python
HTML5 Canvas概述
2009/08/26 HTML / CSS
加拿大领先的牛仔零售商:Bluenotes
2018/01/22 全球购物
预订旅游活动、景点和旅游:GetYourGuide
2019/09/29 全球购物
自愿离婚协议书2015
2015/01/26 职场文书
高校自主招生自荐信2015
2015/03/04 职场文书
2015年人事工作总结范文
2015/04/09 职场文书
实践论读书笔记
2015/06/29 职场文书
《全神贯注》教学反思
2016/02/22 职场文书
聊聊pytorch测试的时候为何要加上model.eval()
2021/05/23 Python