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学习笔记之常用函数及说明
May 23 Python
Python安装Imaging报错:The _imaging C module is not installed问题解决方法
Aug 22 Python
Python的Flask框架与数据库连接的教程
Apr 20 Python
Python实现的多线程http压力测试代码
Feb 08 Python
Bottle框架中的装饰器类和描述符应用详解
Oct 28 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
May 31 Python
解决pandas展示数据输出时列名不能对齐的问题
Nov 18 Python
Python urllib.request对象案例解析
May 11 Python
Keras官方中文文档:性能评估Metrices详解
Jun 15 Python
pandas to_excel 添加颜色操作
Jul 14 Python
Python中常用的os操作汇总
Nov 05 Python
python Protobuf定义消息类型知识点讲解
Mar 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
PHP新手上路(三)
2006/10/09 PHP
实用函数5
2007/11/08 PHP
fleaphp crud操作之findByField函数的使用方法
2011/04/23 PHP
PHP持久连接mysql_pconnect()函数使用介绍
2012/02/05 PHP
php 过滤英文标点符号及过滤中文标点符号代码
2014/06/12 PHP
PHP自定义函数获取URL中一级域名的方法
2016/08/23 PHP
深入理解javascript动态插入技术
2013/11/12 Javascript
javascript 数字格式化输出的实现代码
2013/12/10 Javascript
JavaScript字符串对象split方法入门实例(用于把字符串分割成数组)
2014/10/16 Javascript
jQuery动态背景图片效果实现方法
2015/07/03 Javascript
jQuery插件之jQuery.Form.js用法实例分析(附demo示例源码)
2016/01/04 Javascript
H5+C3+JS实现五子棋游戏(AI篇)
2020/05/28 Javascript
从零开始封装自己的自定义Vue组件
2018/10/09 Javascript
JavaScript this绑定过程深入详解
2018/12/07 Javascript
vue+elementUI 复杂表单的验证、数据提交方案问题
2019/06/24 Javascript
在vue中使用axios实现post方式获取二进制流下载文件(实例代码)
2019/12/16 Javascript
一篇文章让你搞懂JavaScript 原型和原型链
2020/11/23 Javascript
python入门之语句(if语句、while语句、for语句)
2015/01/19 Python
python检测空间储存剩余大小和指定文件夹内存占用的实例
2018/06/11 Python
pycharm下查看python的变量类型和变量内容的方法
2018/06/26 Python
使用Python做定时任务及时了解互联网动态
2019/05/15 Python
python:动态路由的Flask程序代码
2019/11/22 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
2020/04/08 Python
CSS3 animation ? steps 函数详解
2019/08/30 HTML / CSS
迪奥官网:Dior.com
2018/12/04 全球购物
Nice Kicks网上商店:ShopNiceKicks.com
2018/12/25 全球购物
KELLER SPORTS荷兰:在线订购最好的运动产品
2020/10/13 全球购物
介绍Java的内部类
2012/10/27 面试题
综合办公室主任职责
2013/12/16 职场文书
食品安全检查制度
2014/02/03 职场文书
营销总监岗位职责
2014/09/16 职场文书
2014年社区综治工作总结
2014/11/17 职场文书
2014年技术员工作总结
2014/11/18 职场文书
军训结束新闻稿
2015/07/17 职场文书
一看就懂的MySQL的聚簇索引及聚簇索引是如何长高的
2021/05/25 MySQL
分析Netty直接内存原理及应用
2021/06/14 Java/Android