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定时杀进程
Jun 06 Python
Python处理json字符串转化为字典的简单实现
Jul 07 Python
利用python发送和接收邮件
Sep 27 Python
[原创]使用豆瓣提供的国内pypi源
Jul 02 Python
Python装饰器的执行过程实例分析
Jun 04 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
Jul 07 Python
python保存网页图片到本地的方法
Jul 24 Python
python3学生名片管理v2.0版
Nov 29 Python
python树莓派红外反射传感器
Jan 21 Python
对python中if语句的真假判断实例详解
Feb 18 Python
Python内置函数locals和globals对比
Apr 28 Python
用Python仅20行代码编写一个简单的端口扫描器
Apr 08 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脚本数据库功能详解(上)
2006/10/09 PHP
php实现从ftp服务器上下载文件树到本地电脑的程序
2009/02/10 PHP
ajax 缓存 问题 requestheader
2010/08/01 Javascript
JavaScript 判断日期格式是否正确的实现代码
2011/07/04 Javascript
读jQuery之十二 删除事件核心方法
2011/07/31 Javascript
javascript跨域的4种方法和原理详解
2014/04/08 Javascript
JavaScript中setUTCFullYear()方法的使用简介
2015/06/12 Javascript
AngularJs 指令详解及示例代码
2016/09/01 Javascript
JavaScript实现鼠标点击导航栏变色特效
2017/02/08 Javascript
jQuery插件HighCharts绘制2D带有Legend的饼图效果示例【附demo源码下载】
2017/03/10 Javascript
Angualrjs和bootstrap相结合实现数据表格table
2017/03/30 Javascript
AngularJS读取JSON及XML文件的方法示例
2017/05/25 Javascript
使用重写url机制实现验证码换一张功能
2017/08/01 Javascript
深入浅析JavaScript中的RegExp对象
2017/09/18 Javascript
详解如何在vscode里面调试js和node.js的方法步骤
2018/12/24 Javascript
详解React项目如何修改打包地址(编译输出文件地址)
2019/03/21 Javascript
详解element-ui日期时间选择器的日期格式化问题
2019/04/08 Javascript
jQuery提示框插件SweetAlert用法分析
2019/08/05 jQuery
vue 监听窗口变化对页面部分元素重新渲染操作
2020/07/28 Javascript
[48:48]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Dream TIME
2014/05/21 DOTA
[03:17]2016完美“圣”典风云人物:冷冷专访
2016/12/08 DOTA
python self,cls,decorator的理解
2009/07/13 Python
11个并不被常用但对开发非常有帮助的Python库
2015/03/31 Python
Python的Django REST框架中的序列化及请求和返回
2016/04/11 Python
详解pandas安装若干异常及解决方案总结
2019/01/10 Python
在Python 中实现图片加框和加字的方法
2019/01/26 Python
我就是这样学习Python中的列表
2019/06/02 Python
解决Atom安装Hydrogen无法运行python3的问题
2019/08/28 Python
Python用access判断文件是否被占用的实例方法
2020/12/17 Python
优秀学生干部个人的自我评价
2013/10/04 职场文书
自荐信怎么写好
2013/11/11 职场文书
乡下人家教学反思
2014/02/01 职场文书
公司建议书怎么写
2014/05/15 职场文书
竞选班干部演讲稿400字
2014/08/20 职场文书
学习委员竞选稿
2015/11/20 职场文书
Mysql将字符串按照指定字符分割的正确方法
2022/05/30 MySQL