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运行效率的方法之间的对比
Apr 03 Python
python解决网站的反爬虫策略总结
Oct 26 Python
Python利用QQ邮箱发送邮件的实现方法(分享)
Jun 09 Python
django限制匿名用户访问及重定向的方法实例
Feb 07 Python
Python Opencv提取图片中某种颜色组成的图形的方法
Sep 19 Python
Django+boostrap 美化admin后台的操作
Mar 11 Python
查看已安装tensorflow版本的方法示例
Apr 19 Python
Python Switch Case三种实现方法代码实例
Jun 18 Python
给Django Admin添加验证码和多次登录尝试限制的实现
Jul 26 Python
python,Java,JavaScript实现indexOf
Sep 09 Python
Django执行源生mysql语句实现过程解析
Nov 12 Python
Python爬虫UA伪装爬取的实例讲解
Feb 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通过iconv将字符串从GBK转换为UTF8字符集
2011/07/18 PHP
php启动时候提示PHP startup的解决方法
2013/05/07 PHP
zf框架的db类select查询器join链表使用示例(zend框架)
2014/03/14 PHP
PHP函数nl2br()与自定义函数nl2p()换行用法分析
2016/04/02 PHP
bindParam和bindValue的区别以及在Yii2中的使用详解
2018/03/12 PHP
Thinkphp 框架扩展之Widget扩展实现方法分析
2020/04/23 PHP
再谈javascript 动态添加样式规则 W3C校检
2009/12/25 Javascript
javascript字母大小写转换的4个函数详解
2014/05/09 Javascript
javascript几个易错点记录
2014/11/26 Javascript
浅谈JavaScript的push(),pop(),concat()方法
2016/06/03 Javascript
进阶之初探nodeJS
2017/01/24 NodeJs
vue调用高德地图实例代码
2017/04/28 Javascript
解决浏览器会自动填充密码的问题
2017/04/28 Javascript
WdatePicker.js时间日期插件的使用方法
2017/07/26 Javascript
基于vue-cli 打包时抽离项目相关配置文件详解
2018/03/07 Javascript
vue2.0 自定义组件的方法(vue组件的封装)
2018/06/05 Javascript
在小程序中使用canvas的方法示例
2018/09/17 Javascript
javascript匿名函数中的'return function()'作用
2018/10/15 Javascript
中级前端工程师必须要掌握的27个JavaScript 技巧(干货总结)
2019/09/23 Javascript
Nodejs技巧之Exceljs表格操作用法示例
2019/11/06 NodeJs
详解Vue之计算属性
2020/06/20 Javascript
[51:27]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
python 简单备份文件脚本v1.0的实例
2017/11/06 Python
python操作excel的包(openpyxl、xlsxwriter)
2018/06/11 Python
Python英文文章词频统计(14份剑桥真题词频统计)
2019/10/13 Python
TensorFlow基本的常量、变量和运算操作详解
2020/02/03 Python
Python破解BiliBili滑块验证码的思路详解(完美避开人机识别)
2020/02/17 Python
太阳镜仓库,售价20美元或更少:Sunglass Warehouse
2016/09/28 全球购物
简述使用ftp进行文件传输时的两种登录方式?它们的区别是什么?常用的ftp文件传输命令是什么?
2016/11/20 面试题
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
2014/09/26 面试题
个人投资计划书
2014/05/01 职场文书
社区工作者演讲稿
2014/05/23 职场文书
教师民族团结演讲稿
2014/08/27 职场文书
离职信范文
2015/06/23 职场文书
python机器学习创建基于规则聊天机器人过程示例详解
2021/11/02 Python
angular异步验证器防抖实例详解
2022/03/31 Javascript