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实现批量把SVG格式转成png、pdf格式的代码分享
Aug 21 Python
在Python中操作字典之clear()方法的使用
May 21 Python
Python的Flask站点中集成xhEditor文本编辑器的教程
Jun 13 Python
浅谈Python peewee 使用经验
Oct 20 Python
Python探索之创建二叉树
Oct 25 Python
PyQt5每天必学之工具提示功能
Apr 19 Python
python利用微信公众号实现报警功能
Jun 10 Python
python numpy和list查询其中某个数的个数及定位方法
Jun 27 Python
基于wxPython的GUI实现输入对话框(1)
Feb 27 Python
pyinstaller还原python代码过程图解
Jan 08 Python
Python自动巡检H3C交换机实现过程解析
Aug 14 Python
浅析Python OpenCV三种滤镜效果
Apr 11 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
广播爱好者需要了解的天线知识
2021/03/01 无线电
PHP foreach循环使用详解与实例代码
2010/05/08 PHP
php调用云片网接口发送短信的实现方法
2017/10/25 PHP
php正确输出json数据的实例讲解
2018/08/21 PHP
Linux下安装Memcached服务器和客户端与PHP使用示例
2019/04/15 PHP
ajax的hide隐藏问题解决方法
2012/12/11 Javascript
解析JavaScript中delete操作符不能删除的对象
2013/12/03 Javascript
判断某个字符在一个字符串中是否存在的js代码
2014/02/28 Javascript
使用GruntJS构建Web程序之安装篇
2014/06/04 Javascript
jQuery中last()方法用法实例
2015/01/06 Javascript
js简单实现竖向tab选项卡的方法
2015/05/04 Javascript
轻松搞定jQuery.noConflict()
2016/02/15 Javascript
Ubuntu 16.04 64位中搭建Node.js开发环境教程
2016/10/19 Javascript
详解require.js配置路径的用法和css的引入
2017/09/06 Javascript
使用JS动态显示文本
2017/09/09 Javascript
详解小程序毫秒级倒计时(适用于拼团秒杀功能)
2019/05/05 Javascript
jQuery zTree插件快速实现目录树
2019/08/16 jQuery
vue3.0+vue-router+element-plus初实践
2020/12/02 Vue.js
python字典排序实例详解
2015/05/20 Python
python生成随机图形验证码详解
2017/11/08 Python
Python判断一个三位数是否为水仙花数的示例
2018/11/13 Python
解决新django中的path不能使用正则表达式的问题
2018/12/18 Python
Win10下python 2.7与python 3.7双环境安装教程图解
2019/10/12 Python
python 创建一维的0向量实例
2019/12/02 Python
Python中base64与xml取值结合问题
2019/12/22 Python
对Python 字典元素进行删除的方法
2020/07/31 Python
PyCharm2020.1.2社区版安装,配置及使用教程详解(Windows)
2020/08/07 Python
conda安装tensorflow和conda常用命令小结
2021/02/20 Python
高中毕业生自我鉴定范文
2013/09/26 职场文书
商务日语毕业生自荐信
2013/11/23 职场文书
汽车维修工岗位职责
2014/02/12 职场文书
经典的毕业生自荐信范文
2014/04/14 职场文书
多媒体编辑专业毕业生求职信
2014/06/13 职场文书
ThinkPHP5和ThinkPHP6的区别
2021/03/31 PHP
python 如何在 Matplotlib 中绘制垂直线
2021/04/02 Python
画错魏国疆域啦!《派对咖孔明》动画因作画失误于官网致歉
2022/04/07 日漫