socket 多连接
socket 多连接
本文档为文档https://www.cnblogs.com/wodeboke-y/p/11241472.html
后续内容。
上一文档中的案例2给出了一个阻塞型socket server
下面为非阻塞型,关键点如下:
accept阻塞,使用thread解决
socket阻塞,使用setblocking解决
# coding=utf-8
# !/usr/bin/env python
'''
'''
from socket import *
from time import ctime
import threading
import time
HOST = ''
PORT = 2159
BUFSIZ = 1024
ADDR = (HOST, PORT)
tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)
socks = [] # 放每个客户端的socket
def handle():
while True:
for s in socks:
try:
data =
s.recv(BUFSIZ) # 到这里程序继续向下执行
except Exception as
e:
continue
if not data:
socks.remove(s)
continue
s.send('[%s],%s' %
(ctime(), data))
t = threading.Thread(target=handle)
# 子线程
if __name__ == '__main__':
t.start()
print(u'我在%s线程中 ' % threading.current_thread().name) # 本身是主线程
print('waiting
for connecting...')
while True:
clientSock, addr =
tcpSerSock.accept()
print('connected
from:', addr)
clientSock.setblocking(0)
socks.append(clientSock)
最新文章
- jQuery ui autocomplete 与easyUI冲突解决办法(重命名ui的autocomplete 和menu部分)
- C#二维数组
- 关于DButils的简单介绍
- 关于Android studio 相对 eclipse 优点
- transform属性
- 51nod1262 扔球
- 关于Collection'
- Delphi word编辑
- Android辅助功能原理与基本使用详解-AccessibilityService
- JFinal极速开发框架使用笔记(三) 分析Model和ActiveRecord
- JavaFX技术简要总结
- PHP使用自定义key实现对数据加密解密
- HashMap 源码阅读
- 深入学习IOZone【转】
- mysql 递归查找菜单节点的所有子节点
- 栈(stack)信息
- Python + Selenium操作一:截图详解
- etcd 集群运维实践
- [转]magento性能优化的教程(非常详细)
- MySQL锁分类
热门文章
- 图的bfs遍历模板(邻接矩阵存储和邻接表存储)
- SpringBoot整合mybatis使用pageHelper插件进行分页操作
- bugku 输入密码查看flag
- mybatis--多对多关联
- 动手实现CapsNet系列——1 概述
- ARM64架构下登录mysql出错:mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file:
- 深入delphi编程理解之消息(六)无窗口单元消息的创建、接受及dispatch模式编程
- Vue - 如何使用npm run build后的dist文件夹
- UITextField的内存泄漏问题
- denied: requested access to the resource is denied 解决办法