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抓取豆瓣图片并自动保存示例学习
Jan 10 Python
Python中对元组和列表按条件进行排序的方法示例
Nov 10 Python
Python基于Pymssql模块实现连接SQL Server数据库的方法详解
Jul 20 Python
python 获取url中的参数列表实例
Dec 18 Python
在python中用print()输出多个格式化参数的方法
Jul 16 Python
Python3.7+tkinter实现查询界面功能
Dec 24 Python
Python连接SQLite数据库并进行增册改查操作方法详解
Feb 18 Python
Python 实现使用空值进行赋值 None
Mar 12 Python
Python通过socketserver处理多个链接
Mar 18 Python
Python如何使用正则表达式爬取京东商品信息
Jun 01 Python
Python tempfile模块生成临时文件和临时目录
Sep 30 Python
python中if嵌套命令实例讲解
Feb 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获取汉字的拼音(全部与首字母)
2013/06/27 PHP
PHP ajax 异步执行不等待执行结果的处理方法
2015/05/27 PHP
PHP的Yii框架中使用数据库的配置和SQL操作实例教程
2016/03/17 PHP
thinkPHP的表达式查询用法详解
2016/09/14 PHP
yii2 commands模式以及配置crontab定时任务的方法
2017/08/19 PHP
Laravel-admin之修改操作日志的方法
2019/09/30 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
2020/02/16 PHP
javascript HTMLEncode HTMLDecode的完整实例(兼容ie和火狐)
2009/06/02 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2011/06/27 Javascript
对比分析AngularJS中的$http.post与jQuery.post的区别
2015/02/27 Javascript
深入浅析JavaScript中对事件的三种监听方式
2015/09/29 Javascript
详解Javascript中的Object对象
2016/02/28 Javascript
[原创]Bootstrap 中下拉菜单修改成鼠标悬停直接显示
2016/04/14 Javascript
Angularjs过滤器使用详解
2016/05/25 Javascript
关于RequireJS的简单介绍即使用方法
2016/10/20 Javascript
vue-cli入门之项目结构分析
2017/04/20 Javascript
详解react服务端渲染(同构)的方法
2017/09/21 Javascript
JavaScript体验异步更好的解决办法
2018/01/08 Javascript
在vue中通过axios异步使用echarts的方法
2018/01/13 Javascript
在ES5与ES6环境下处理函数默认参数的实现方法
2018/05/13 Javascript
微信小程序中button去除默认的边框实例代码
2019/08/01 Javascript
微信小程序调用wx.getImageInfo遇到的坑解决
2020/05/31 Javascript
详解Vue 的异常处理机制
2020/11/30 Vue.js
深入理解Python3中的http.client模块
2017/03/29 Python
Python+Turtle动态绘制一棵树实例分享
2018/01/16 Python
python 实现波浪滤镜特效
2020/12/02 Python
使用pandas读取表格数据并进行单行数据拼接的详细教程
2021/03/03 Python
Crocs欧洲官网:Crocs Europe
2020/01/14 全球购物
党的群众路线教育实践活动心得体会
2014/03/03 职场文书
暑期社会实践心得体会
2014/09/02 职场文书
2014年班干部工作总结
2014/11/25 职场文书
党支部承诺书
2015/01/20 职场文书
goland设置颜色和字体的操作
2021/05/05 Golang
python入门学习关于for else的特殊特性讲解
2021/11/20 Python
IDEA中sout快捷键无效问题的解决方法
2022/07/23 Java/Android
Mysql的Table doesn't exist问题及解决
2022/12/24 MySQL