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 参数列表中的self 显式不等于冗余
Dec 01 Python
python类型强制转换long to int的代码
Feb 10 Python
python读写文件操作示例程序
Dec 02 Python
Python的Flask框架中实现简单的登录功能的教程
Apr 20 Python
pandas 取出表中一列数据所有的值并转换为array类型的方法
Apr 11 Python
Python wxpython模块响应鼠标拖动事件操作示例
Aug 23 Python
python 用下标截取字符串的实例
Dec 25 Python
Django单元测试工具test client使用详解
Aug 02 Python
python3实现微型的web服务器
Sep 03 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
Dec 19 Python
Pytorch mask_select 函数的用法详解
Feb 18 Python
浅谈tensorflow 中的图片读取和裁剪方式
Jun 30 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
解析CI的AJAX分页 另类实现方法
2013/06/27 PHP
thinkPHP中验证码的简单使用方法
2015/12/26 PHP
laravel实现上传图片,并且制作缩略图,按照日期存放的代码
2019/10/16 PHP
JavaScript中的ArrayBuffer详细介绍
2014/12/08 Javascript
javascript实现Table间隔色以及选择高亮(和动态切换数据)的方法
2015/05/14 Javascript
详解js跨域原理以及2种解决方案
2015/12/09 Javascript
JavaScript学习小结之被嫌弃的eval函数和with语句实例详解
2016/08/01 Javascript
Node.js连接MongoDB数据库产生的问题
2017/02/08 Javascript
Spring Boot+AngularJS+BootStrap实现进度条示例代码
2017/03/02 Javascript
JavaScript实现类似淘宝的购物车效果
2017/03/16 Javascript
浅谈React的最大亮点之虚拟DOM
2018/05/29 Javascript
springMvc 前端用json的方式向后台传递对象数组方法
2018/08/07 Javascript
详解vue移动端项目代码拆分记录
2019/03/15 Javascript
JS实现获取当前所在周的周六、周日示例分析
2019/05/11 Javascript
基于vue-cli搭建多模块且各模块独立打包的项目
2019/06/12 Javascript
JavaScript对象属性操作实例解析
2020/02/04 Javascript
vue element和nuxt的使用技巧分享
2021/01/14 Vue.js
[05:06]2017亚洲邀请赛DAC回顾片
2017/04/19 DOTA
仅利用30行Python代码来展示X算法
2015/04/01 Python
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
2015/04/16 Python
Python使用BeautifulSoup库解析HTML基本使用教程
2016/03/31 Python
tensorflow实现加载mnist数据集
2018/09/08 Python
在PyCharm中三步完成PyPy解释器的配置的方法
2018/10/29 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
2019/10/23 Python
Python Scrapy框架第一个入门程序示例
2020/02/05 Python
对tensorflow 中tile函数的使用详解
2020/02/07 Python
澳大利亚排名第一的在线酒类商店:MyBottleShop
2018/04/26 全球购物
罗技美国官网:Logitech美国
2020/01/22 全球购物
毕业生自荐信
2013/12/14 职场文书
喜之郎果冻广告词
2014/03/20 职场文书
出国留学担保书
2014/05/20 职场文书
单位员工收入证明样本
2014/10/09 职场文书
幼儿园感恩节活动方案2014
2014/10/11 职场文书
教师求职自荐信范文
2015/03/04 职场文书
党章学习心得体会2016
2016/01/14 职场文书
Java多线程并发FutureTask使用详解
2022/06/28 Java/Android