python套接字流重定向实例汇总


Posted in Python onMarch 03, 2016

将套接字流重定向到标准输入或输出流

#!/usr/bin/env python3
"""
测试socket-stream 重定向模式
"""
import sys,os,time
from multiprocessing import Process
from socket import *
 
def initListenerSocket(port=50008,host=''):
    """ 
    初始化在服务器模式下调用者用于监听连接的套接字
    """
    sock=socket()
    try:
        sock.bind((host,port))
    except OSError as e:
        print('Address already in use')
        os._exit(1)
    sock.listen(5)
    conn,addr=sock.accept()
    return conn
 
def redirecOut(port=50008,host='localhost'):
    """ 
    在接受之前其他连接都失败,连接调用者标准输出流
    到一个套接字,这个套接字用于gui监听,在收听者启动后,启动调用者
    """
    sock=socket()
    try:
        sock.connect((host,port))
    except ConnectionRefusedError as e:
        print('connection refuse')
        os._exit(1)
    file=sock.makefile('w')
    sys.stdout=file
    return sock
 
def redirecIn(port=50008,host='localhost'):
    """ 
    连接调用者标准输入流到用于gui来提供的套接字
    """
    sock=socket()
    try:
        sock.connect((host,port))
    except ConnectionRefusedError as e:
        print('conenction refuse')
        os._exit(1)
    file=sock.makefile('r')
    sys.stdin=file
    return sock
 
def redirecBothAsClient(port=50008,host='localhost'):
    """
    在这种模式下,连接调用者标准输入和输出流到相同的套接字
    调用者对于服务器来说就是客户端:发送消息,接受响应答复
    """
    sock=socket()
    try:
        sock.connect((host,port))
    except ConnectionRefusedError as e:
        print('connection refuse')
        os._exit(1)
    ofile=sock.makefile('w')
    ifile=sock.makefile('r')
    sys.stdout=ofile
    sys.stdin=ifile
    return sock
 
def redirecBothAsServer(port=50008,host='localhost'):
    """
    在这种模式下,连接调用者标准输入和输出流到相同的套接字,调用者对于
    服务器来说就是服务端:接受消息,发送响应答复
    """
    sock=socket()
    try:
        sock.bind((host,port))
    except OSError as e:
        print('Address already in use')
        os._exit(1)
    sock.listen(5)
    conn,addr=sock.accept()
    ofile=conn.makefile('w')
    ifile=conn.makefile('r')
    sys.stdout=ofile
    sys.stdin=ifile
    return conn
 
def server1():
    mypid=os.getpid()
    conn=initListenerSocket()
    file=conn.makefile('r')
    for i in range(3):
        data=file.readline().rstrip()
        print('server %s got [%s]' %(mypid,data))
 
def client1():
    time.sleep(1)
    mypid=os.getpid()
    redirecOut()
    for i in range(3):
        print('client: %s:%s' % (mypid,i))
        sys.stdout.flush()
 
def server2():
    mypid=os.getpid()
    conn=initListenerSocket()
    for i in range(3):
        conn.send(('server %s got [%s]\n' %(mypid,i)).encode())
 
def client2():
    time.sleep(1)
    mypid=os.getpid()
    redirecIn()
    for i in range(3):
        data=input()
        print('client %s got [%s]]'%(mypid,data))
 
def server3():
    mypid=os.getpid()
    conn=initListenerSocket()
    file=conn.makefile('r')
    for i in range(3):
        data=file.readline().rstrip()
        conn.send(('server %s got [%s]\n' % (mypid,data)).encode())
 
def client3():
    time.sleep(1)
    mypid=os.getpid()
    redirecBothAsClient()
    for i in range(3):
        print('Client %s: %s' %(mypid,data))
        data=input()
        sys.stderr.write('client %s got [%s]\n' %(mypid,data))
 
def server4(port=50008,host='localhost'):
    mypid=os.getpid()
    sock=socket()
    try:
        sock.connect((host,port))
    ConnectionRefusedError as e:
        print('connection refuse')
        os._exit(1)
    file=sock.makefile('r')
    for i in range(3):
        sock.send(('server %s: %S\n' %(mypid,i)).encode())
        data=file.readline().rstrip()
        print('server %s got [%s]' %(mypid,data))
 
def client4():
    time.sleep(1)
    mypid=os.getpid()
    redirecBothAsServer()
    for i in range(3):
        data=input()
        print('client %s got [%s]'%(mypid,data))
        sys.stdout.flush()
 
def server5():
    mypid=os.getpid()
    conn=initListenerSocket()
    file=conn.makefile('r')
    for i in range(3):
        conn.send(('server %s:%s\n' %(mypid,i)).encode())
        data=file.readline().rstrip()
        print('server %s got [%s]' % (mypid,data))
 
def client5():
    mypid=os.getpid()
    s=redirecBothAsClient()
    for i in range(3):
        data=input()
        print('client %s got [%s]'%(mypid,data))
        sys.stdout.flush()
 
def main():
    server=eval('server'+sys.argv[1])
    client=eval('client'+sys.argv[1])
    Process(target=server).start()
    client()
 
if __name__=='__main__':
    main()
Python 相关文章推荐
Python使用新浪微博API发送微博的例子
Apr 10 Python
总结Python中逻辑运算符的使用
May 13 Python
Python实现高效求解素数代码实例
Jun 30 Python
python实现域名系统(DNS)正向查询的方法
Apr 19 Python
简单了解python模块概念
Jan 11 Python
Python OpenCV对本地视频文件进行分帧保存的实例
Jan 08 Python
selenium+python自动化测试之环境搭建
Jan 23 Python
python SQLAlchemy 中的Engine详解
Jul 04 Python
解决python中导入win32com.client出错的问题
Jul 26 Python
pandas中ix的使用详细讲解
Mar 09 Python
PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)的步骤详解
Nov 02 Python
python调试工具Birdseye的使用教程
May 25 Python
Python设计模式中单例模式的实现及在Tornado中的应用
Mar 02 #Python
Python使用设计模式中的责任链模式与迭代器模式的示例
Mar 02 #Python
详解Python设计模式编程中观察者模式与策略模式的运用
Mar 02 #Python
Python设计模式编程中解释器模式的简单程序示例分享
Mar 02 #Python
分析Python中设计模式之Decorator装饰器模式的要点
Mar 02 #Python
实例解析Python设计模式编程之桥接模式的运用
Mar 02 #Python
Python随机生成带特殊字符的密码
Mar 02 #Python
You might like
PHP+MYSQL会员系统的登陆即权限判断实现代码
2011/09/23 PHP
PHP解码unicode编码的中文字符代码分享
2014/08/13 PHP
PHP实现SMTP邮件的发送实例
2018/09/27 PHP
Prototype RegExp对象 学习
2009/07/19 Javascript
JQuery Tips(2) 关于$()包装集你不知道的
2009/12/14 Javascript
TextArea 控件的最大长度问题(js json)
2009/12/16 Javascript
Jquery优化效率 提升性能解决方案
2010/09/06 Javascript
jquery 实现两级导航菜单附效果图
2014/03/07 Javascript
jquery实现的鼠标下拉滚动置顶效果
2014/07/24 Javascript
angularJS提交表单(form)
2015/02/09 Javascript
js实现类似菜单风格的TAB选项卡效果代码
2015/08/28 Javascript
JavaScript获取页面中超链接数量的方法
2015/11/09 Javascript
jQuery实现的指纹扫描效果实例(附演示与demo源码下载)
2016/01/26 Javascript
jQuery判断浏览器并动态调整select宽度的方法
2016/03/02 Javascript
nodejs搭建本地服务器并访问文件的方法
2017/03/03 NodeJs
移动端触摸滑动插件swiper使用方法详解
2017/08/11 Javascript
微信小程序中换行空格(多个空格)写法详解
2018/07/10 Javascript
vue input实现点击按钮文字增删功能示例
2019/01/29 Javascript
微信小程序中转义字符的处理方法
2019/03/28 Javascript
微信小程序实现横向滚动导航栏效果
2019/12/12 Javascript
vue+node 实现视频在线播放的实例代码
2020/10/19 Javascript
微信小程序自定义支持图片的弹窗
2020/12/21 Javascript
详解Python中映射类型的内建函数和工厂函数
2015/08/19 Python
python调用系统ffmpeg实现视频截图、http发送
2018/03/06 Python
python+pandas生成指定日期和重采样的方法
2018/04/11 Python
Python实现定制自动化业务流量报表周报功能【XlsxWriter模块】
2019/03/11 Python
Python 离线工作环境搭建的方法步骤
2019/07/29 Python
基于Pytorch SSD模型分析
2020/02/18 Python
解析python 类方法、对象方法、静态方法
2020/08/15 Python
银行门卫岗位职责
2013/12/29 职场文书
学术会议欢迎词
2014/01/09 职场文书
公司年会抽奖活动主持词
2014/03/31 职场文书
作风建设剖析材料
2014/10/06 职场文书
幼儿园三八妇女节活动总结
2015/02/06 职场文书
无犯罪记录证明样本
2015/06/16 职场文书
利用 SQL Server 过滤索引提高查询语句的性能分析
2021/07/15 SQL Server