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 相关文章推荐
Python3使用requests发闪存的方法
May 11 Python
教你用python3根据关键词爬取百度百科的内容
Aug 18 Python
详细介绍Python的鸭子类型
Sep 12 Python
Python实现将一个大文件按段落分隔为多个小文件的简单操作方法
Apr 17 Python
python中实现精确的浮点数运算详解
Nov 02 Python
python 获取文件下所有文件或目录os.walk()的实例
Apr 23 Python
详解Python正则表达式re模块
Mar 19 Python
python基于递归解决背包问题详解
Jul 03 Python
Python接口自动化判断元素原理解析
Feb 24 Python
django 解决自定义序列化返回处理数据为null的问题
May 20 Python
python mysql中in参数化说明
Jun 05 Python
详解anaconda离线安装pytorchGPU版
Sep 08 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 header()函数常用方法总结
2014/04/11 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
2015/11/10 PHP
PHP匿名函数(闭包函数)详解
2019/03/22 PHP
使用js在页面中绘制表格核心代码
2013/09/16 Javascript
关于JavaScript中name的意义冲突示例介绍
2014/05/29 Javascript
理解Javascript图片预加载
2016/02/23 Javascript
JS判断字符串字节数并截取长度的方法
2016/03/05 Javascript
对js eval()函数的一些见解
2016/08/15 Javascript
jQuery为动态生成的select元素添加事件的方法
2016/08/29 Javascript
Vue2.0设置全局样式(less/sass和css)
2017/11/18 Javascript
解决npm管理员身份install时出现权限的问题
2018/03/16 Javascript
jQuery实现输入框的放大和缩小功能示例
2018/07/21 jQuery
vue侧边栏动态生成下级菜单的方法
2018/09/07 Javascript
vue返回上一页面时回到原先滚动的位置的方法
2018/12/20 Javascript
详解vue的双向绑定原理及实现
2019/05/05 Javascript
详解Vue 项目中的几个实用组件(ts)
2019/10/29 Javascript
node.js Promise对象的使用方法实例分析
2019/12/26 Javascript
react组件基本用法示例小结
2020/04/27 Javascript
[02:32]DOTA2英雄基础教程 祸乱之源
2013/12/23 DOTA
简单谈谈python中的多进程
2016/11/06 Python
python 打印直角三角形,等边三角形,菱形,正方形的代码
2017/11/21 Python
Python全排列操作实例分析
2018/07/24 Python
更新pip3与pyttsx3文字语音转换的实现方法
2019/08/08 Python
使用Python进行中文繁简转换的实现代码
2019/10/18 Python
jupyter notebook 参数传递给shell命令行实例
2020/04/10 Python
Python定义函数实现累计求和操作
2020/05/03 Python
Python Selenium XPath根据文本内容查找元素的方法
2020/12/07 Python
Python实现Kerberos用户的增删改查操作
2020/12/14 Python
python爬取股票最新数据并用excel绘制树状图的示例
2021/03/01 Python
一道SQL存储过程面试题
2016/10/07 面试题
修理厂厂长岗位职责
2014/01/30 职场文书
计算机网络专业求职信
2014/06/05 职场文书
购房公证委托书(2014版)
2014/09/12 职场文书
华山导游词
2015/02/03 职场文书
感恩教育主题班会
2015/08/12 职场文书
会计工作自我鉴定范文
2019/06/21 职场文书