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使用sorted函数对列表进行排序的方法
Apr 04 Python
python使用multiprocessing模块实现带回调函数的异步调用方法
Apr 18 Python
Python 创建新文件时避免覆盖已有的同名文件的解决方法
Nov 16 Python
Python 正则表达式匹配字符串中的http链接方法
Dec 25 Python
Python 函数返回值的示例代码
Mar 11 Python
python3实现钉钉消息推送的方法示例
Mar 14 Python
Python获取命令实时输出-原样彩色输出并返回输出结果的示例
Jul 11 Python
python函数的万能参数传参详解
Jul 26 Python
Python 使用 environs 库定义环境变量的方法
Feb 25 Python
python如何查看安装了的模块
Jun 23 Python
python 解决Windows平台上路径有空格的问题
Nov 10 Python
python xlwt模块的使用解析
Apr 13 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_NETWORK_GETADDRESSES: GETADDRINFO FAILED问题解决办法
2014/05/04 PHP
教大家制作简单的php日历
2015/11/17 PHP
php表单加入Token防止重复提交的方法分析
2016/10/10 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
PHP7移除的扩展和SAPI
2021/03/09 PHP
Javascript 获取链接(url)参数的方法[正则与截取字符串]
2010/02/09 Javascript
javascript针对DOM的应用实例(一)
2012/04/15 Javascript
jQuery循环滚动展示代码 可应用到文字和图片上
2012/05/11 Javascript
jQuery.holdReady()使用方法
2014/05/20 Javascript
手写的一个兼容各种浏览器的javascript getStyle函数(获取元素的样式)
2014/06/06 Javascript
JS不能跨域借助jquery获取IP地址的方法
2014/08/20 Javascript
jquery实现公告翻滚效果
2015/02/27 Javascript
详解JavaScript中数组的相关知识
2015/07/29 Javascript
js实现input密码框提示信息的方法(附html5实现方法)
2016/01/14 Javascript
使用jQuery制作Web页面遮罩层插件的实例教程
2016/05/26 Javascript
Javascript中级语法快速入手
2016/07/30 Javascript
js仿手机页面文件下拉刷新效果
2016/10/14 Javascript
最常见的左侧分类菜单栏jQuery实现代码
2016/11/28 Javascript
微信小程序实现日历功能
2018/11/27 Javascript
基于js实现判断浏览器类型代码实例
2020/07/17 Javascript
[01:56]2014DOTA2西雅图邀请赛 MVP外卡赛老队长精辟点评
2014/07/09 DOTA
[03:22]DAC最前线(第二期)—DOTA2亚洲邀请赛主赛场周边及线路探访
2015/01/24 DOTA
Python守护进程(daemon)代码实例
2015/03/06 Python
Python探索之Metaclass初步了解
2017/10/28 Python
Python生成器以及应用实例解析
2018/02/08 Python
mac下给python3安装requests库和scrapy库的实例
2018/06/13 Python
使用python获取电脑的磁盘信息方法
2018/11/01 Python
Python单元测试unittest的具体使用示例
2018/12/17 Python
打造经典复古风格的品牌:Alice + Olivia(爱丽丝+奥利维亚)
2016/09/07 全球购物
ASOS比利时:英国线上零售商及自有品牌
2018/07/29 全球购物
新大陆软件面试题
2016/11/24 面试题
感恩祖国演讲稿
2014/09/09 职场文书
党员个人剖析材料
2014/09/30 职场文书
入股合作协议书
2014/10/12 职场文书
公司离职证明范本
2014/10/17 职场文书
2015年出纳年终工作总结
2015/05/14 职场文书