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中的推导式使用详解
Jun 03 Python
Python爬取国外天气预报网站的方法
Jul 10 Python
linux环境下python中MySQLdb模块的安装方法
Jun 16 Python
Python编程实现控制cmd命令行显示颜色的方法示例
Aug 14 Python
python调用并链接MATLAB脚本详解
Jul 05 Python
python-web根据元素属性进行定位的方法
Dec 13 Python
如何通过Python3和ssl实现加密通信功能
May 09 Python
Django之富文本(获取内容,设置内容方式)
May 21 Python
如何在Python3中使用telnetlib模块连接网络设备
Sep 21 Python
python工具快速为音视频自动生成字幕(使用说明)
Jan 27 Python
Pytorch 使用tensor特定条件判断索引
Apr 08 Python
Python中文纠错的简单实现
Jul 07 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
php动态生成函数示例
2014/03/21 PHP
php实现mysql事务处理的方法
2014/12/25 PHP
PHP制作用户注册系统
2015/10/23 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
php抽象方法和普通方法的区别点总结
2019/10/13 PHP
javascript 动态加载 css 方法总结
2009/07/11 Javascript
JS俄罗斯方块,包含完整的设计理念
2010/12/11 Javascript
JS继承--原型链继承和类式继承
2013/04/08 Javascript
JS的get和set使用示例
2014/02/20 Javascript
js中日期的加减法
2015/05/06 Javascript
JS常用函数和常用技巧小结
2016/10/15 Javascript
微信小程序购物商城系统开发系列-工具篇的介绍
2016/11/21 Javascript
vue的状态管理模式vuex
2017/11/30 Javascript
如何构建 vue-ssr 项目的方法步骤
2020/08/04 Javascript
详解在Python中处理异常的教程
2015/05/24 Python
Python 字符串与二进制串的相互转换示例
2018/07/23 Python
python接口自动化测试之接口数据依赖的实现方法
2019/04/26 Python
python 中值滤波,椒盐去噪,图片增强实例
2019/12/18 Python
HTML5之SVG 2D入门12—SVG DOM及DOM操作介绍
2013/01/30 HTML / CSS
HTML5触摸事件演化tap事件介绍
2016/03/25 HTML / CSS
与世界上最好的跑步专业品牌合作:Fleet Feet
2019/03/22 全球购物
波兰珠宝品牌:YES
2019/08/09 全球购物
中国旅游网站:途牛旅游网
2019/09/29 全球购物
J2EE相关知识面试题
2013/08/26 面试题
酒店管理毕业生自荐信
2013/10/24 职场文书
设计总监岗位职责
2013/12/07 职场文书
酒店实习个人鉴定
2013/12/07 职场文书
yy生日主持词
2014/03/20 职场文书
租房协议书
2014/04/10 职场文书
岗位职责说明书
2014/05/07 职场文书
擅自离岗检讨书
2014/09/12 职场文书
教师党员承诺书2015
2015/01/21 职场文书
2015年度信用社工作总结
2015/05/04 职场文书
《花钟》教学反思
2016/02/17 职场文书
利用For循环遍历Python字典的三种方法实例
2022/03/25 Python