Python socket实现简单聊天室


Posted in Python onApril 01, 2018

本文实例为大家分享了Python socket实现简单聊天室的具体代码,供大家参考,具体内容如下

服务端使用了select模块,实现了对多个socket的监控。客户端由于select在Windows下只能对socket使用,所以使用了多线程来实现对客户端输入和socket连接的同时监控。注意这里的socket设置为了非阻塞。这样就实现了在一个线程中同时进行socket的接收和发送。

服务器代码:

# -*- coding: utf-8 -*-
import socket,select

connection_list = []
host = ''
port = 10001

def board_cast(sock,message):
 for socket in connection_list:
  if socket != server_sock and socket != sock:
   try:
    socket.send(message)
   except:
    socket.close()
    print str(socket.getpeername())+' is offline'
    connection_list.remove(socket)

server_sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
server_sock.setblocking(0)
server_sock.bind((host,port))
server_sock.listen(10)
connection_list.append(server_sock)

while 1:
 readable,writable,error = select.select(connection_list,[],[])
 for sock in readable:
  if sock == server_sock:
   connection,connection_add = sock.accept()
   message = str(connection_add)+'enter room'
   board_cast(connection,message)
   print connection_add,'%s connect'
   connection_list.append(connection)
  else:
   try:
    date = sock.recv(1024)
    print date
    board_cast(sock,'('+str(sock.getpeername())+') :'+date)
   except:
    message2 = str(sock.getpeername())+ 'is offline'
    board_cast(sock,message2)
    print str(sock.getpeername())+ ' is offline'
    sock.close()
    connection_list.remove(sock)
    continue

客户端代码:

# -*- coding: utf-8 -*-
import socket,threading,time
flag = 0
date = ''
lock = threading.Lock()

host = 'localhost'
port = 10001
client_sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client_sock.setblocking(0)

class Mythread1(threading.Thread):
 def __init__(self):
  threading.Thread.__init__(self)
 def run(self):
  global flag, date
  while 1:
   date = raw_input()
   if len(date):
    lock.acquire()
    flag = 1
    lock.release()

class Mythread2(threading.Thread):
 def __init__(self):
  threading.Thread.__init__(self)
 def run(self):
  global flag
  global date
  while 1:
   try:
    buf = client_sock.recv(1024)
    if len(buf):
     print buf
   except:
    pass
   if flag:
    try:
     client_sock.send(date)
    except socket.error, e:
     print e
    lock.acquire()
    flag = 0
    lock.release()



try:
 client_sock.connect((host,port))
 print"连接成功"
except socket.error,e:
 print e

t1 = Mythread1()
t2 = Mythread2()
t1.start()
t2.start()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
如何将python中的List转化成dictionary
Aug 15 Python
python如何在列表、字典中筛选数据
Mar 19 Python
python3如何将docx转换成pdf文件
Mar 23 Python
python实现数独游戏 java简单实现数独游戏
Mar 30 Python
Pipenv一键搭建python虚拟环境的方法
May 22 Python
解决python super()调用多重继承函数的问题
Jun 26 Python
python 伯努利分布详解
Feb 25 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
Apr 27 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
Jun 23 Python
Python 测试框架unittest和pytest的优劣
Sep 26 Python
在pyCharm中下载第三方库的方法
Apr 18 Python
Python爬虫入门案例之爬取二手房源数据
Oct 16 Python
简单实现python聊天程序
Apr 01 #Python
简单实现Python爬取网络图片
Apr 01 #Python
Python中elasticsearch插入和更新数据的实现方法
Apr 01 #Python
python之DataFrame实现excel合并单元格
Feb 22 #Python
python合并同类型excel表格的方法
Apr 01 #Python
python实现两个文件合并功能
Apr 01 #Python
Python中一行和多行import模块问题
Apr 01 #Python
You might like
PHP支持多种格式图片上传(支持jpg、png、gif)
2011/11/03 PHP
PHPMYADMIN导入数据最大为2M的解决方法
2012/04/23 PHP
PHP并发场景的三种解决方案代码实例
2021/02/27 PHP
setAttribute 与 class冲突解决
2008/02/17 Javascript
javascript 静态对象和构造函数的使用和公私问题
2010/03/02 Javascript
用JS控制回车事件的代码
2011/02/20 Javascript
JQuery扩展插件Validate—6 radio、checkbox、select的验证
2011/09/05 Javascript
JavaScript入门之事件、cookie、定时等
2011/10/21 Javascript
jQuery遍历Table应用示例
2014/04/09 Javascript
js操作IE浏览器弹出浏览文件夹可以返回目录路径
2014/07/14 Javascript
深入理解JavaScript系列(48):对象创建模式(下篇)
2015/03/04 Javascript
javascript中JSON.parse()与eval()解析json的区别
2016/05/19 Javascript
详解微信小程序开发之下拉刷新 上拉加载
2016/11/24 Javascript
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
2018/03/01 Javascript
解决vue.js提交数组时出现数组下标的问题
2019/11/05 Javascript
python文件操作整理汇总
2014/10/21 Python
python中enumerate函数遍历元素用法分析
2016/03/11 Python
Python基本数据结构与用法详解【列表、元组、集合、字典】
2019/03/23 Python
用python求一个数组的和与平均值的实现方法
2019/06/29 Python
python读取tif图片时保留其16bit的编码格式实例
2020/01/13 Python
用python解压分析jar包实例
2020/01/16 Python
python和JavaScript哪个容易上手
2020/06/23 Python
python 5个顶级异步框架推荐
2020/09/09 Python
Python3.9新特性详解
2020/10/10 Python
Bealls Florida百货商店:生活服饰、家居装饰和鞋子
2018/02/23 全球购物
奢华的意大利皮革手袋:Bene Handbags
2019/10/29 全球购物
惠而浦美国官网:Whirlpool.com
2021/01/19 全球购物
Java面试题:请问一下代码输出是什么
2015/05/27 面试题
音乐器材管理制度
2014/01/31 职场文书
葬礼司仪主持词
2014/03/31 职场文书
幼儿园校园小喇叭广播稿
2014/10/17 职场文书
乡镇民主生活会发言材料
2014/10/20 职场文书
工伤事故证明
2014/10/20 职场文书
论群众路线学习心得体会
2014/10/31 职场文书
SQL模糊查询报:ORA-00909:参数个数无效问题的解决
2021/06/21 Oracle
table不让td文字溢出操作方法
2022/12/24 HTML / CSS