- 浏览: 1444298 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (691)
- linux (207)
- shell (33)
- java (42)
- 其他 (22)
- javascript (33)
- cloud (16)
- python (33)
- c (48)
- sql (12)
- 工具 (6)
- 缓存 (16)
- ubuntu (7)
- perl (3)
- lua (2)
- 超级有用 (2)
- 服务器 (2)
- mac (22)
- nginx (34)
- php (2)
- 内核 (2)
- gdb (13)
- ICTCLAS (2)
- mac android (0)
- unix (1)
- android (1)
- vim (1)
- epoll (1)
- ios (21)
- mysql (3)
- systemtap (1)
- 算法 (2)
- 汇编 (2)
- arm (3)
- 我的数据结构 (8)
- websocket (12)
- hadoop (5)
- thrift (2)
- hbase (1)
- graphviz (1)
- redis (1)
- raspberry (2)
- qemu (31)
- opencv (4)
- socket (1)
- opengl (1)
- ibeacons (1)
- emacs (6)
- openstack (24)
- docker (1)
- webrtc (11)
- angularjs (2)
- neutron (23)
- jslinux (18)
- 网络 (13)
- tap (9)
- tensorflow (8)
- nlu (4)
- asm.js (5)
- sip (3)
- xl2tp (5)
- conda (1)
- emscripten (6)
- ffmpeg (10)
- srt (1)
- wasm (5)
- bert (3)
- kaldi (4)
- 知识图谱 (1)
最新评论
-
wahahachuang8:
我喜欢代码简洁易读,服务稳定的推送服务,前段时间研究了一下go ...
websocket的helloworld -
q114687576:
http://www.blue-zero.com/WebSoc ...
websocket的helloworld -
zhaoyanzimm:
感谢您的分享,给我提供了很大的帮助,在使用过程中发现了一个问题 ...
nginx的helloworld模块的helloworld -
haoningabc:
leebyte 写道太NB了,期待早日用上Killinux!么 ...
qemu+emacs+gdb调试内核 -
leebyte:
太NB了,期待早日用上Killinux!
qemu+emacs+gdb调试内核
上接
c语言的socket基础http://haoningabc.iteye.com/blog/2305026
使用python
一言不合上代码
server.py
客户端
client.py
代码效果一样
accept阻塞等待客户端
一个客户单就会建立一个c(connection)
最终服务端会变成
一个socket和多个connection
但是还是有顺序,阻塞问题
换上select解决阻塞
每次accept第一次阻塞完成取得connection后,就放到一个select监控数组里面
下一次循环的时候进入recv阻塞
使
所有的connection都变成recv
最终,任何一个client有数据接收都会马上收到相应,不会阻塞到某一个连接上,
相当于同时开了多个connection
一个好玩的tunproxy,使用select写的
http://www.secdev.org/projects/tuntap_udp/
把tun设备和socket用select关联起来
http://www.secdev.org/projects/tuntap_udp/files/tunproxy.py
c语言的socket基础http://haoningabc.iteye.com/blog/2305026
使用python
一言不合上代码
server.py
import socket s = socket.socket() host = socket.gethostname() port = 1234 s.bind((host,port)) s.listen(5) while True: c, addr = s.accept()#阻塞 print 'Got connection from', addr print c.recv(1024)#阻塞 c.close()
客户端
client.py
import socket,sys s = socket.socket() host = socket.gethostname() port = 1234 s.connect((host,port)) #hi=raw_input('hello? ') hi=sys.stdin.readline()[:-1] s.send(hi)
代码效果一样
accept阻塞等待客户端
一个客户单就会建立一个c(connection)
最终服务端会变成
一个socket和多个connection
但是还是有顺序,阻塞问题
换上select解决阻塞
import socket,select s = socket.socket() host = socket.gethostname() port = 1234 s.bind((host,port)) s.listen(5) inputs = [s] #print str(s) while True: #rs=[] print "while starting....." rs, ws, es = select.select(inputs,[],[]) #print("rs:"+str(rs)) print("rs len:"+str(len(rs))) for r in rs: if r is s: c, addr = s.accept() print 'print Got connection from', addr inputs.append(c) else: #print "r is not sssssssssssssss" try: data = r.recv(1024) disconnected = not data except socket.error: disconnected = True if disconnected: print "print " ,r.getpeername(), 'disconnected' inputs.remove(r) else: print "print ",data
每次accept第一次阻塞完成取得connection后,就放到一个select监控数组里面
下一次循环的时候进入recv阻塞
使
所有的connection都变成recv
最终,任何一个client有数据接收都会马上收到相应,不会阻塞到某一个连接上,
相当于同时开了多个connection
一个好玩的tunproxy,使用select写的
http://www.secdev.org/projects/tuntap_udp/
把tun设备和socket用select关联起来
http://www.secdev.org/projects/tuntap_udp/files/tunproxy.py
发表评论
-
xl2tp 备份
2019-09-24 16:25 5742019年9月24日更新: 注意,需要开启firewall ... -
sdl笔记
2019-01-31 17:19 684sdl教程教程 https://github.com/Twin ... -
tinyemu
2019-01-24 17:59 1396参考https://bellard.org/jslinux/t ... -
建立tap设备的c的代码
2019-01-08 19:09 435tapper.c #include <stdio.h& ... -
jslinux总结帖
2019-01-04 21:33 1017注意个问题: chrome不要用两个tab页,否则ping不通 ... -
br0和tap0的互相影响
2019-01-02 19:17 773转载 http://www.cnblogs.com/wlei/ ... -
aws搭建xl2tp给iphone使用
2018-12-26 21:37 18052019年12月26日 可以参考原来的配置 https:// ... -
consul的基本使用
2017-06-27 11:13 1350### 安装 [centos7上consul的安装](ht ... -
lvs的helloworld
2017-06-13 20:36 560###################lvs######### ... -
系统调用的helloworld
2017-05-04 16:14 558《2.6内核标准教程》 p293 #include < ... -
bitcoin和cgminer的安装
2017-04-05 22:45 1920参考 http://blog.csdn.net/rion_ch ... -
ceph安装和常用命令
2017-03-21 21:55 911/etc/hosts ssh-keygen ssh-copy- ... -
jslinux-deobfuscated-network
2017-02-13 22:37 611基础知识 查看网络包 tcpdump -i eth0 -e ... -
mobile terminal 笔记
2016-12-02 15:35 545找出旧的iphone4 越狱之后可以变个小操作系统 mobi ... -
Tunnels with iproute2
2016-11-14 15:22 511copy from http://members.ferrar ... -
qemu用tap方式启动vm的网络试验(ip route)
2016-09-14 11:29 2674ip route add 192.168.8.0/24 via ... -
socket的方式使用qemu建立虚拟机
2016-06-24 17:54 1800qemu的-net参数 -net nic 必须有,基本配置mo ... -
tap的方式使用qemu建立虚拟机NAT网络
2016-06-23 18:03 9497基本概念: vm:虚拟机 ... -
qemu用nat的方式使用tap建立虚拟机
2016-06-23 16:15 11普通桥接参考 http://haoningabc.iteye. ... -
tap的方式使用qemu建立虚拟机桥接网络
2016-06-22 20:53 7612需求:建立一个虚拟机,使网络和内网一样,当一台普通接入内网的服 ...
相关推荐
import select# import signal#用于捕获中断信号 import cPickle#将python对象进行序列化:dumps将python对象序列化保存为字符串,loads与之相反 from socket import * HOST = '' def send(channel,*args):#发送数据 ...
Python 中的 Socket 编程 说明 译者注 授权 开始 Socket API 概览 TCP Sockets 客户端 / 服务器echo 程序 echo 程序的服务端 echo 程序的客户端 运行echo 程序的客户端和服务端 查看 socket 状态 通信流程的分解 ...
主要介绍了Python基于select实现的socket服务器,实例分析了Python基于select与socket模块实现socket通信的相关技巧,需要的朋友可以参考下
客户端由于select在Windows下只能对socket使用,所以使用了多线程来实现对客户端输入和socket连接的同时监控。注意这里的socket设置为了非阻塞。这样就实现了在一个线程中同时进行socket的接收和发送。 服务器代码:...
服务端可以接受多个客户端连接 客户端,服务端可以进行双向通信,双向发信息。 采用select函数,实现多客户连接. 该文件是自己写的,有不好的见谅,
本文实例为大家分享了Python基于Socket实现简单聊天室,供...import socket,select\nhost='' port=7799 addr=(host,port) inputs=[] members={} #配置服务端 def start_Server(): server=socket.socket(socket.AF_INET
第 23 章 python 实现 select 和 epoll 模型 socket 网络编程 第 24 章 对 Python-memcache 分布式散列和调用的实现 第 25 章 Parallel Python 实现程序的并行多 cpu 多核利用【pp 模块】 第 26 章 关于 python ...
第10周-第16章节-Python3.5-Select解析Socket通信3.avi
第10周-第17章节-Python3.5-Select解析Socket通信4.avi
第10周-第15章节-Python3.5-Select解析Socket通信2.avi
第10周-第14章节-Python3.5-Select解析Socket通信1.avi
本文实例讲述了Python网络编程使用select实现socket全双工异步通信功能。分享给大家供大家参考,具体如下: 在前面一篇《Python网络编程之TCP套接字简单用法》中,我们实现了tcp客户端与服务器的通信,但是功能十分...
select()方法接收并监控3个通信列表, 第一个是所有的输入的data,就是指外部发过来的数据,第2个是监控和接收所有要发出去的data(outgoing data),第3个监控错误信息 在网上一直在找这个select.select的参数解释, 但...
通常也称作”套接字”,用于描述IP地址和端口,是一个通信链的句柄。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。...
Python参考手册,官方正式版参考手册,chm版。以下摘取部分内容:Navigation index modules | next | Python » 3.6.5 Documentation » Python Documentation contents What’s New in Python What’s New In ...
Python中的select模块专注于I/O多路复用,提供了select poll epoll三个方法(其中后两个在Linux中可用,windows仅支持select),另外也提供了kqueue方法(freeBSD系统) select方法 进程指定内核监听哪些文件描述符...
第一部分 Python 基础篇.(1-80题) 第二部分 网络编程和并发.(81-112题) 第三部分 数据库和缓存.(113 -158 题) 第四部分 前端、框架和其他(155 题) 81.简述 OSI 七层协议。 82.什么是 C/S 和 B/S 架构?. ...
Single-Threaded Multitasking with select 348 Other Topics 350 Miscellaneous Considerations for Protocol Design 350 Trusted Servers 350 Terse Protocols 350 The Twisted Framework 351 Deferred ...