python epoll方式tcp连接回发消息
# -*- coding:utf-8 -*-
import socket
import select class testserver():
def __init__(self):
self.serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.serversocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.serversocket.bind(('0.0.0.0', 8889))
self.serversocket.listen(128)
self.serversocket.setblocking(0) def run(self):
response = "connecting status: 200"
epoll = select.epoll()
epoll.register(self.serversocket.fileno(), select.EPOLLIN) try:
connections = {}
requests = {}
responses = {}
endflag = '\n\r\n' while True:
events = epoll.poll(1)
for fid, event in events:
if fid == self.serversocket.fileno():
connection, address = self.serversocket.accept()
connection.setblocking(0)
epoll.register(connection.fileno(), select.EPOLLIN)
connections[connection.fileno()] = connection
requests[connection.fileno()] = ''
responses[connection.fileno()] = response.encode() elif event & select.EPOLLIN:
try:
requests[fid] = connections[fid].recv(1024)
if len(str(requests[fid].decode())) == 0:
connections[fid].shutdown(socket.SHUT_RDWR)
break
else:
print("2 | ------ : " + str(requests[fid].decode()) + "\n")
byteswritten = connections[fid].send(responses[fid]) if endflag in requests[fid]:
epoll.modify(fid, select.EPOLLOUT)
connections[fid].setsockopt(socket.IPPROTO_TCP, socket.TCP_CORK, 1)
print('-' * 40 + '\n' + requests[fid].decode()[:-2])
except:
continue elif event & select.EPOLLOUT:
byteswritten = connections[fid].send(responses[fid])
responses[fid] = responses[fid][byteswritten:]
if len(responses[fid]) == 0:
connections[fid].setsockopt(socket.IPPROTO_TCP, socket.TCP_CORK, 0)
epoll.modify(fid, 0)
connections[fid].shutdown(socket.SHUT_RDWR) elif event & select.EPOLLHUP:
epoll.unregister(fid)
connections[fid].close()
del connections[fid] except:
print("server excepted ...")
epoll.unregister(self.serversocket.fileno())
self.run() finally:
print("server closed ...") if __name__ == "__main__":
serv = testserver()
serv.run()
python epoll方式tcp连接回发消息的更多相关文章
- 初识python:scoket 单用户互发消息
实现功能: 启动"服务器".通过"客户端1"连接"服务器",然后互发消息.在此过程中,有"客户端2"连接到"服 ...
- 我们使用 Kafka 生产者在发消息的时候我们关注什么(Python 客户端 1.01 broker)
之前使用 Kafka 的客户端消费者比较多一点,而且也是无脑订阅使用也没有深入了解过具体的参数.总的来说使用不够细节. 这次公司项目活动期间暴露非常多的问题,于是有了这篇文章. 首先我们来拆解一下 K ...
- C# Winform TCP发消息
服务端: 代码: using System; using System.Collections.Generic; using System.IO; using System.Net; using Sy ...
- ActiveMQ发消息和收消息
来自:http://blog.163.com/chengwei_1104/blog/static/53645274201382315625329/ ActiveMQ 是Apache出品,最流行的,能力 ...
- 【Python】如何基于Python写一个TCP反向连接后门
首发安全客 如何基于Python写一个TCP反向连接后门 https://www.anquanke.com/post/id/92401 0x0 介绍 在Linux系统做未授权测试,我们须准备一个安全的 ...
- iPad版微信终于来临了 微信5.4版搜索更智能 转账就是发消息
等待甚久的iPad版微信终于来临了!昨日微信iOS版本更新至5.4.0.16,新增功能包括搜索公众号.识别图中二维码.面对面收钱,同时适配iPad.(微信5.4安卓版重回ios风格 导航菜单都放底栏位 ...
- python socket之tcp服务器与客户端demo
python socket之tcp服务器与客户端demo 作者:vpoet mails:vpoet_sir@163.com server: # -*- coding: cp936 -*- ''' 建立 ...
- Python 网络通信协议 tcp udp区别
网络通信的整个流程 在这一节就给大家讲解,有些同学对网络是既熟悉又陌生,熟悉是因为我们都知道,我们安装一个路由器,拉一个网线,或者用无限路由器,连上网线或者连上wifi就能够上网购物.看片片.吃鸡了, ...
- python之路----TCP与UDP
TCP import socket #tcp协议 sk = socket.socket() # 买手机 创建一个socket对象 sk.bind(('127.0.0.1',8080)) # 给serv ...
随机推荐
- jQuery 中的事件绑定
一.事件概念 和数据库中的触发器一样,当操作了数据的时候会引发对应的触发器程序执行 一样,JS 中的事件就是对用户特定的行为作出相应的响应的过程,其实上就是浏览器 监听到用户的某些行为的时候会执行对应 ...
- ccpc杭州站 赛后总结
Ccpc杭州站赛后总结 2017年11月4号五号,我参加了ccpc杭州站的比赛,我的队友是聂少飞和王艳,在4号一点半,举行了比赛开幕式,听着教练代表的发言,听着参赛选手代表的发言,听着志愿者的发言,都 ...
- 微信小程序域名
微信小程序与第三方服务器通讯的域名必要条件1.一个已备案的域名,不是localhost.也不是127.0.0.1,域名不能加端口2.加ssl证书,也就是https://~~~3.HTTPS 服务器的 ...
- Centos7 启动指定docker容器报错
今天做docker实验时,把docker镜像pull下后,启动报如下错误: 错误信息:WARNING: IPv4 forwarding is disabled. Networking will not ...
- telnet-server、telnet
1.查询yum仓库中的安装包 [root@localhost /]# yum list |grep telnettelnet.x86_64 1 ...
- [转帖]Oracle 各个版本的升级路线图
从oracle 7开始(甚至更早版本)到oracle 9iR2. 来源: https://blog.csdn.net/cymm_liu/article/details/11647533 http:// ...
- 基于.NET平台的Ocelot网关框架教程汇总
Ocelot 框架是基于.NET 开发的 API 网关,API网关是系统内部服务暴露在外部的一个访问入口,类似于代理服务器,就像一个公司的门卫承担着寻址.限制进入.安全检查.位置引导等工作,我们可以形 ...
- Msi中文件替换
转自https://blog.csdn.net/davidhsing/article/details/9962377 ※说明:目前可以用于MSI编辑的软件很多,但是有些软件在保存时会在MSI文件中写入 ...
- Spring MVC 使用介绍(十二)控制器返回结果统一处理
一.概述 在为前端提供http接口时,通常返回的数据需要统一的json格式,如包含错误码和错误信息等字段. 该功能的实现有四种可能的方式: AOP 利用环绕通知,对包含@RequestMapping注 ...
- noip2017部分题目
D1T3 逛公园 题目描述 策策同学特别喜欢逛公园.公园可以看成一张NN个点MM条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口,NN号点是公园的出口,每条边有一个非负权值, 代表策策经过 ...