Python基于Socket实现简单聊天室


Posted in Python onFebruary 17, 2020

本文实例为大家分享了Python基于Socket实现简单聊天室,供大家参考,具体内容如下

服务端

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time  : 2017/7/27 15:34
# @File  : Server.py
 
"""
聊天室服务端
"""
 
import socket,select
 
host=''
port=7799
addr=(host,port)
 
inputs=[]
members={}
 
#配置服务端
def start_Server():
  server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  server.bind(addr)
  server.listen(5)
  return server
 
 
#返回聊天室成员列表
def show_members(w):
  name_list=[]
  for i in w:
    name_list.append(w[i])
  return name_list
 
 
#处理新的成员
def new_member(server):
  client,addr=server.accept()
  print('欢迎进入聊天室 ,%s,%s' % (client,addr))
  try:
    client.send('请输入名字')
    name=client.recv(1024)
    inputs.append(client)
    members[client]=name
 
    names='其它用户%s'% (show_members(members))
    client.send(names)
  except Exception,e:
    print(e)
 
 
#正式启动服务端
def server_run():
  server=start_Server()
  print 'start'
  inputs.append(server)
  while True:
    rs,ws,es=select.select(inputs,[],[])
    for temp in rs:
      if temp is server:
        new_member(temp)
      else:
        disConnect=False
        try:
          data=temp.recv(1024)
          data=members[temp]+'说'+data
        except socket.error:
          data=members[temp]+'离开'
          disConnect=True
        if disConnect:
          inputs.remove(temp)
          print data
          for other in inputs:
            if other!=server and other!=temp:
              try:
                other.send(data)
              except Exception,e:
                print(e)
          del members[temp]
 
        else:
          print data
 
          for other in inputs:
            if other!=server and other!=temp:
              try:
                other.send(data)
              except Exception,e:
                print(e)
 
 
if __name__ == '__main__':
  server_run()

客户端

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time  : 2017/7/27 15:34
# @File  : Client.py
 
"""
聊天室客户端
"""
 
 
import socket
import select
import threading
host='127.0.0.1'
port=7799
addr=(host,port)
 
#配置连接
def connect():
  client=socket.socket()
  client.connect(addr)
  return client
 
 
#显示用户列表
def show_member(s):
  my=[s]
  while True:
    rs,ws,es=select.select(my,[],[])
    if s in rs:
      try:
        print s.recv(1024)
      except socket.error:
        print 'socket is error'
        exit()
 
#进行对话
def talk(s):
    while True:
      try:
        info=raw_input('>>>')
      except Exception:
        print 'can\'t input'
        exit()
      try:
        s.send(info)
      except Exception,e:
        print e
        exit()
 
#主函数
def main():
  client=connect()
  t=threading.Thread(target=show_member,args=(client,))
  t.start()
  t1=threading.Thread(target=talk,args=(client,))
  t1.start()
 
if __name__ == '__main__':
  main()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python重新引入被覆盖的自带function
Jul 16 Python
Python贪心算法实例小结
Apr 22 Python
django中模板的html自动转意方法
May 27 Python
对Tensorflow中的矩阵运算函数详解
Jul 27 Python
python 文件查找及内容匹配方法
Oct 25 Python
在Python中给Nan值更改为0的方法
Oct 30 Python
Python版名片管理系统
Nov 30 Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
Dec 15 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
Dec 03 Python
python目标检测给图画框,bbox画到图上并保存案例
Mar 10 Python
Python调用C/C++的方法解析
Aug 05 Python
filter使用python3代码进行迭代元素的实例详解
Dec 03 Python
TFRecord文件查看包含的所有Features代码
Feb 17 #Python
tensorflow之tf.record实现存浮点数数组
Feb 17 #Python
Python读取表格类型文件代码实例
Feb 17 #Python
基于Python获取docx/doc文件内容代码解析
Feb 17 #Python
Python多线程获取返回值代码实例
Feb 17 #Python
Python实现ATM系统
Feb 17 #Python
python设置环境变量的作用整理
Feb 17 #Python
You might like
PHP4之COOKIE支持详解
2006/10/09 PHP
php自动加载机制的深入分析
2013/06/08 PHP
微信支付的开发流程详解
2016/09/13 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
2019/10/15 PHP
深入聊聊Array的sort方法的使用技巧.详细点评protype.js中的sortBy方法
2007/04/12 Javascript
仿服务器端脚本方式的JS模板实现方法
2007/04/27 Javascript
让图片旋转任意角度及JQuery插件使用介绍
2013/03/20 Javascript
Jquery中request和request.form和request.querystring的区别
2015/11/26 Javascript
js判断上传文件后缀名是否合法
2016/01/28 Javascript
微信小程序 实例应用(记账)详解
2016/09/28 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
2016/10/03 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
2016/10/11 Javascript
Bootstrap3 内联单选和多选框
2016/12/29 Javascript
vue快捷键与基础指令详解
2017/06/01 Javascript
JavaScript中重名的函数与对象示例详析
2017/09/28 Javascript
Vue加载组件、动态加载组件的几种方式
2018/08/31 Javascript
详解Vue前端生产环境发布配置实战篇
2019/05/07 Javascript
[28:07]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第二场 12.13
2020/12/17 DOTA
Python抓取淘宝下拉框关键词的方法
2015/07/08 Python
python连接mongodb密码认证实例
2018/10/16 Python
解决python os.mkdir创建目录失败的问题
2018/10/16 Python
Django框架创建mysql连接与使用示例
2019/07/29 Python
input元素的url类型和email类型简介
2012/07/11 HTML / CSS
新加坡航空官方网站:Singapore Airlines
2016/10/13 全球购物
英国男女豪华配饰和礼品网站:Black.co.uk
2020/02/28 全球购物
医学专业职业生涯规划范文
2014/02/05 职场文书
最新奶茶店创业计划书范文
2014/02/08 职场文书
交通安全标语
2014/06/06 职场文书
营业用房租赁协议书
2014/11/26 职场文书
2014年高数考试作弊检讨书
2014/12/14 职场文书
数学教师个人工作总结
2015/02/06 职场文书
社会主义核心价值观主题教育活动总结
2015/05/07 职场文书
刑事法律意见书
2015/06/04 职场文书
消夏晚会主持词
2015/06/30 职场文书
Python利用capstone实现反汇编
2022/04/06 Python
选购到合适的激光打印机
2022/04/21 数码科技