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中的装饰器详解
Apr 13 Python
Python使用django获取用户IP地址的方法
May 11 Python
Python中动态检测编码chardet的使用教程
Jul 06 Python
python unittest实现api自动化测试
Apr 04 Python
Python实现性能自动化测试竟然如此简单
Jul 30 Python
python实现PCA降维的示例详解
Feb 24 Python
Python文件操作基础流程解析
Mar 19 Python
Python Matplotlib简易教程(小白教程)
Jul 28 Python
Python 操作 MySQL数据库
Sep 18 Python
利用Python实现学生信息管理系统的完整实例
Dec 30 Python
Python标准库pathlib操作目录和文件
Nov 20 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实现下载文件的两种方法
2013/07/05 PHP
Zend studio文件注释模板设置方法
2013/09/29 PHP
php设计模式之单例模式实例分析
2015/02/25 PHP
php计算指定目录下文件占用空间的方法
2015/03/13 PHP
js树形控件脚本代码
2008/07/24 Javascript
node.js使用npm 安装插件时提示install Error: ENOENT报错的解决方法
2014/11/20 Javascript
Bootstrap弹出带合法性检查的登录框实例代码【推荐】
2016/06/23 Javascript
Javascript 判断两个IP是否在同一网段实例代码
2016/11/28 Javascript
基于node.js依赖express解析post请求四种数据格式
2017/02/13 Javascript
JavaScript EventEmitter 背后的秘密 完整版
2018/03/29 Javascript
详解封装基础的angular4的request请求方法
2018/06/05 Javascript
Angular路由ui-router配置详解
2018/08/01 Javascript
vue观察模式浅析
2018/09/25 Javascript
[01:02:55]CHAOS vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
Python下的subprocess模块的入门指引
2015/04/16 Python
python实现将元祖转换成数组的方法
2015/05/04 Python
python使用fcntl模块实现程序加锁功能示例
2017/06/23 Python
Python列表推导式与生成器表达式用法示例
2018/02/08 Python
python递归全排列实现方法
2018/08/18 Python
Python自动发送邮件的方法实例总结
2018/12/08 Python
pthon贪吃蛇游戏详细代码
2019/01/27 Python
python实现合并两个排序的链表
2019/03/03 Python
Python 实现自动导入缺失的库
2019/10/29 Python
python科学计算之narray对象用法
2019/11/25 Python
pandas 强制类型转换 df.astype实例
2020/04/09 Python
H5新属性audio音频和video视频的控制详解(推荐)
2016/12/09 HTML / CSS
高三毕业生自我鉴定
2013/12/20 职场文书
社区十八大感言
2014/01/19 职场文书
《掌声》教学反思
2014/02/23 职场文书
整改报告怎么写
2014/11/06 职场文书
结婚堵门保证书
2015/05/08 职场文书
2015年控辍保学工作总结
2015/05/18 职场文书
2016元旦晚会主持词开场白和结束语
2015/12/04 职场文书
MySQL 外键约束和表关系相关总结
2021/06/20 MySQL
JavaScript 反射学习技巧
2021/10/16 Javascript
Golang 并发编程 SingleFlight模式
2022/04/26 Golang