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语句、函数与方法的使用技巧总结
Dec 08 Python
Python 实现王者荣耀中的敏感词过滤示例
Jan 21 Python
Python将json文件写入ES数据库的方法
Apr 10 Python
python利用多种方式来统计词频(单词个数)
May 27 Python
pandas通过字典生成dataframe的方法步骤
Jul 23 Python
pytorch中的卷积和池化计算方式详解
Jan 03 Python
Python对称的二叉树多种思路实现方法
Feb 28 Python
Pycharm最常用的快捷键及使用技巧
Mar 05 Python
Pycharm创建文件时自动生成文件头注释(自定义设置作者日期)
Nov 24 Python
python实现图片九宫格分割的示例
Apr 25 Python
如何利用Python实现n*n螺旋矩阵
Jan 18 Python
python运行脚本文件的三种方法实例
Jun 25 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把JPEG图片转换成Progressive JPEG的方法
2014/06/30 PHP
PHP使用mysql_fetch_object从查询结果中获取对象集的方法
2015/03/18 PHP
PHP防盗链的基本思想 防盗链的设置方法
2015/09/25 PHP
javascript设计模式 封装和信息隐藏(上)
2012/07/24 Javascript
js的压缩及jquery压缩探讨(提高页面加载性能/保护劳动成果)
2013/01/29 Javascript
jquery中子元素和后代元素的区别示例介绍
2014/04/02 Javascript
jQuery中attr()与prop()函数用法实例详解(附用法区别)
2015/12/29 Javascript
微信jssdk在iframe页面失效问题的解决措施
2016/03/03 Javascript
jQuery实现简单漂亮的Nav导航菜单效果
2017/03/29 jQuery
Bootstrap多级菜单的实现代码
2017/05/23 Javascript
详解Vue使用命令行搭建单页面应用
2017/05/24 Javascript
微信小程序录音与播放录音功能
2017/12/25 Javascript
简述vue状态管理模式之vuex
2018/08/29 Javascript
javascript匿名函数中的'return function()'作用
2018/10/15 Javascript
微信小程序tabbar底部导航
2018/11/05 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
2018/11/21 Javascript
详解小程序不同页面之间通讯的解决方案
2018/11/23 Javascript
layui数据表格重载实现往后台传参
2019/11/15 Javascript
python读写二进制文件的方法
2015/05/09 Python
在DigitalOcean的服务器上部署flaskblog应用
2015/12/19 Python
详解如何用OpenCV + Python 实现人脸识别
2017/10/20 Python
Python跨文件全局变量的实现方法示例
2017/12/10 Python
python实现简单名片管理系统
2018/11/30 Python
解决pandas展示数据输出时列名不能对齐的问题
2019/11/18 Python
pyinstaller打包程序exe踩过的坑
2019/11/19 Python
深入了解Python装饰器的高级用法
2020/08/13 Python
Python 字典一个键对应多个值的方法
2020/09/29 Python
Looking4Parking美国:全球排名第一的机场停车比较品牌
2019/08/26 全球购物
Ajxa常见问题都有哪些
2014/03/26 面试题
给民警的表扬信
2014/01/08 职场文书
小学生期末自我鉴定
2014/01/19 职场文书
三月学雷锋活动总结
2014/06/26 职场文书
通信工程求职信
2014/07/16 职场文书
社区学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
2016年学校“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
python实现学员管理系统(面向对象版)
2022/06/05 Python