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 ...
随机推荐
- 写一函数,用来求表达式1+2+3+.....+n的值,并编写主函数
Description 写一函数,用来求表达式1+2+3+.....+n的值,并编写主函数.n由键盘输入. Input 输入一个整数 Output 输出表达式的值 Sample Input 5 Sam ...
- [JSOI2008]Blue Mary的旅行
嘟嘟嘟 看\(n\)那么小,就知道是网络流.然后二分,按时间拆点. 刚开始我看成所有航班一天只能起飞一次,纠结了好一会儿.但实际上是每一个航班单独考虑,互不影响. 建图很显然,拆完点后每一个点的第\( ...
- 【es6】数组排重
let set = new Set([1,2,3,4,4,4,4,4]); console.log( Array.from(set) ); //输出:[ 1, 2, 3, 4 ]
- 好程序员web前端分享javascript关联数组用法总结
好程序员web前端分享javascript关联数组用法总结,有需要的朋友可以参考下. Hash关联数组定义 代码如下 // 定义空数组 myhash = { } // 直接定义数组 myhash = ...
- 你所不知道的ASP.NET Core MVC/WebApi基础系列(二)
前言 好久没冒泡了,算起来估计有快半年没更新博客了,估计是我第一次停更如此之久,人总有懒惰的时候,时间越长越懒惰,但是呢,不学又不行,持续的惰性是不行dei,要不然会被时光所抛弃,技术所淘汰,好吧,进 ...
- 【alpha阶段】第十次Scrum Meeting
每日任务内容 队员 昨日完成任务 明日要完成的任务 牛宇航 #26 评价总览接口编写https://github.com/rRetr0Git/rateMyCourse/issues/26 alpha阶 ...
- [转帖]Windows 上面IE的历史
微软向Chrome举手投降 这么多代IE你都用过吗 2019年04月20日 18:48 4030 次阅读 稿源:太平洋电脑网 2 条评论 这个清明假节,很多人过得波澜不惊,然而一个曾被万千网民挂在口中 ...
- Django(九)上:ModelForm操作
一.内容回顾 Model - 数据库操作 - 验证 class A(MOdel): user = email = pwd = Form - class LoginForm(Form): email = ...
- 快速实现兼容的js复制方式。有点非正规,通过非正规的排版实现。
<div style="height:1px; width:1px; overflow:hidden; position:absolute;left:-2px;"> & ...
- vedio-js的视频插件用法
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...