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基于windows平台锁定键盘输入的方法
Mar 05 Python
Python中字符串的格式化方法小结
May 03 Python
利用python实现简单的邮件发送客户端示例
Dec 23 Python
Python实现通讯录功能
Feb 22 Python
Python运维自动化之nginx配置文件对比操作示例
Aug 29 Python
python读写csv文件的方法
Aug 13 Python
matplotlib quiver箭图绘制案例
Apr 17 Python
Python grequests模块使用场景及代码实例
Aug 10 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
Nov 09 Python
Python 利用flask搭建一个共享服务器的步骤
Dec 05 Python
Python机器学习三大件之一numpy
May 10 Python
Python使用protobuf序列化和反序列化的实现
May 19 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的array数组和使用实例简明教程(容易理解)
2014/03/20 PHP
PHP中spl_autoload_register()和__autoload()区别分析
2014/05/10 PHP
ThinkPHP应用模式扩展详解
2014/07/16 PHP
使用YUI+Ant 实现JS CSS压缩
2014/09/02 PHP
学习php设计模式 php实现装饰器模式(decorator)
2015/12/07 PHP
php并发加锁问题分析与设计代码实例讲解
2021/02/26 PHP
JavaScript中yield实用简洁实现方式
2010/06/12 Javascript
ExtJS PropertyGrid中使用Combobox选择值问题
2010/06/13 Javascript
手机端网页点击链接触发自动拨打或保存电话的示例代码
2014/08/15 Javascript
jQuery中:first选择器用法实例
2014/12/30 Javascript
jquery实现动画菜单的左右滚动、渐变及图形背景滚动等效果
2015/08/25 Javascript
jQuery中get方法用法分析
2016/12/07 Javascript
微信小程序中实现一对多发消息详解及实例代码
2017/02/14 Javascript
vue 指定组件缓存实例详解
2018/04/01 Javascript
详解如何在Vue里建立长按指令
2018/08/20 Javascript
浅谈Vue数据响应思路之数组
2018/11/06 Javascript
微信小程序框架的页面布局代码
2019/08/17 Javascript
使用kbone解决Vue项目同时支持小程序问题
2019/11/08 Javascript
vue router-link 默认a标签去除下划线的实现
2020/11/06 Javascript
vue+echarts+datav大屏数据展示及实现中国地图省市县下钻功能
2020/11/16 Javascript
python读取Android permission文件
2013/11/01 Python
python将图片文件转换成base64编码的方法
2015/03/14 Python
Python NumPy库安装使用笔记
2015/05/18 Python
Python教程之全局变量用法
2016/06/27 Python
对pandas中两种数据类型Series和DataFrame的区别详解
2018/11/12 Python
Python enumerate函数遍历数据对象组合过程解析
2019/12/11 Python
PyTorch中的padding(边缘填充)操作方式
2020/01/03 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
2020/03/31 Python
Python selenium使用autoIT上传附件过程详解
2020/05/26 Python
python和C++共享内存传输图像的示例
2020/10/27 Python
洲际酒店集团英国官网:IHG英国
2019/07/10 全球购物
通信工程专业女生个人求职信
2013/09/21 职场文书
物流仓管员工作职责
2014/01/06 职场文书
吸烟检讨书2000字
2014/02/13 职场文书
金融系毕业生自荐书
2014/07/08 职场文书
2014年学生会生活部工作总结
2014/11/07 职场文书