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中的filter()函数的用法
Apr 27 Python
pycharm安装图文教程
May 02 Python
Python中turtle作图示例
Nov 15 Python
深入理解Python单元测试unittest的使用示例
Nov 18 Python
Python实现多进程共享数据的方法分析
Dec 04 Python
解决python中无法自动补全代码的问题
Dec 04 Python
PyQt5 实现给窗口设置背景图片的方法
Jun 13 Python
python pickle存储、读取大数据量列表、字典数据的方法
Jul 07 Python
使用OpenCV实现仿射变换—平移功能
Aug 29 Python
使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
Dec 12 Python
django rest framework 过滤时间操作
Jul 12 Python
Python pyecharts绘制条形图详解
Apr 02 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
模拟OICQ的实现思路和核心程序(一)
2006/10/09 PHP
CentOS系统中PHP安装扩展的方式汇总
2017/04/09 PHP
推荐20家国外的脚本下载网站
2011/04/28 Javascript
使用JQuery和CSS模拟超链接的用户单击事件的实现代码
2012/05/23 Javascript
javascript中关于break,continue的特殊用法与介绍
2012/05/24 Javascript
使用jQuery的easydrag插件实现可拖动的DIV弹出框
2016/02/19 Javascript
微信js-sdk预览图片接口及从拍照或手机相册中选图接口用法示例
2016/10/13 Javascript
JS+HTML5实现的前端购物车功能插件实例【附demo源码下载】
2016/10/17 Javascript
bootstrap weebox 支持ajax的模态弹出框
2017/02/23 Javascript
在 Angular 中实现搜索关键字高亮示例
2017/03/21 Javascript
Angular2 父子组件通信方式的示例
2018/01/29 Javascript
vuejs选中当前样式active的实例
2018/08/22 Javascript
layer弹出层取消遮罩的方法
2019/09/25 Javascript
js实现移动端吸顶效果
2020/01/08 Javascript
viewer.js实现图片预览功能
2020/06/24 Javascript
Python的Django框架中的数据过滤功能
2015/07/17 Python
Python 列表排序方法reverse、sort、sorted详解
2016/01/22 Python
对python 通过ssh访问数据库的实例详解
2019/02/19 Python
Python搭建Spark分布式集群环境
2019/07/05 Python
Django中自定义admin Xadmin的实现代码
2019/08/09 Python
Python常用模块logging——日志输出功能(示例代码)
2019/11/20 Python
在spyder IPython console中,运行代码加入参数的实例
2020/04/20 Python
PyTorch中Tensor的数据类型和运算的使用
2020/09/03 Python
BONIA波尼亚新加坡官网:皮革手袋,鞋类和配件
2016/08/25 全球购物
戴尔英国官网:Dell英国
2017/05/27 全球购物
波比布朗英国官网:Bobbi Brown英国
2017/11/13 全球购物
泰国第一的化妆品网站:Konvy
2018/02/25 全球购物
豪华床上用品、床单和浴室必需品:Peacock Alley
2019/09/04 全球购物
Linux开机引导的步骤是什么
2014/02/26 面试题
父亲八十大寿答谢词
2014/01/23 职场文书
爱祖国爱家乡演讲稿
2014/09/02 职场文书
2014大学辅导员工作总结
2014/12/02 职场文书
2015年业务员工作总结范文
2015/04/07 职场文书
任长霞观后感
2015/06/16 职场文书
《爬天都峰》教学反思
2016/02/23 职场文书
vue ref如何获取子组件属性值
2022/03/31 Vue.js