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操作mongodb根据_id查询数据的实现方法
May 20 Python
浅谈python中的实例方法、类方法和静态方法
Feb 17 Python
详解python调度框架APScheduler使用
Mar 28 Python
python 读入多行数据的实例
Apr 19 Python
django表单实现下拉框的示例讲解
May 29 Python
利用Python读取txt文档的方法讲解
Jun 23 Python
python 实现查询Neo4j多节点的多层关系
Dec 23 Python
Django高并发负载均衡实现原理详解
Apr 04 Python
python爬虫中抓取指数的实例讲解
Dec 01 Python
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
Jan 05 Python
教你使用Python pypinyin库实现汉字转拼音
May 27 Python
Matplotlib绘制条形图的方法你知道吗
Mar 21 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 智能404跳转代码,适合换域名没改变目录的网站
2010/06/04 PHP
关于php程序报date()警告的处理(date_default_timezone_set)
2013/10/22 PHP
php+curl 发送图片处理代码分享
2015/07/09 PHP
php使用array_chunk函数将一个数组分割成多个数组
2018/12/05 PHP
jQuery源码分析-03构造jQuery对象-工具函数
2011/11/14 Javascript
jquery的map与get方法详解
2013/11/04 Javascript
jQuery实现灰蓝风格标准二级下拉菜单效果代码
2015/08/31 Javascript
利用JS判断字符串是否含有数字与特殊字符的方法小结
2016/11/25 Javascript
JS常用正则表达式总结【经典】
2017/05/12 Javascript
[js高手之路]寄生组合式继承的优势详解
2017/08/28 Javascript
Ionic学习日记实现验证码倒计时
2018/02/08 Javascript
通过jquery toggleClass()属性制作文章段落更改背景颜色
2018/05/21 jQuery
jQuery实现简单全选框
2020/09/13 jQuery
vue 使用localstorage实现面包屑的操作
2020/11/16 Javascript
python:print格式化输出到文件的实例
2018/05/14 Python
python得到单词模式的示例
2018/10/15 Python
Python3 实现文件批量重命名示例代码
2019/06/03 Python
Python 私有化操作实例分析
2019/11/21 Python
Python Lambda函数使用总结详解
2019/12/11 Python
Python编程快速上手——Excel表格创建乘法表案例分析
2020/02/28 Python
python selenium xpath定位操作
2020/09/01 Python
python raise的基本使用
2020/09/10 Python
详解python 支持向量机(SVM)算法
2020/09/18 Python
Python爬虫教程之利用正则表达式匹配网页内容
2020/12/08 Python
Python创建简单的神经网络实例讲解
2021/01/04 Python
CSS3绘制六边形的简单实现
2016/08/25 HTML / CSS
Booking.com西班牙:全球酒店预订
2018/03/30 全球购物
HEMA英国:荷兰原创设计
2018/08/28 全球购物
物流管理毕业生自荐信
2013/10/24 职场文书
2014学校庆三八妇女节活动总结
2014/03/01 职场文书
《火烧云》教学反思
2014/04/12 职场文书
化工工艺设计求职信
2014/06/25 职场文书
大学生团支书竞选稿
2015/11/21 职场文书
Java生成读取条形码和二维码的简单示例
2021/07/09 Java/Android
使用CSS3实现按钮悬停闪烁动态特效代码
2021/08/30 HTML / CSS
mysql5.7的安装及Navicate长久免费使用的实现过程
2021/11/17 MySQL