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装饰器decorator用法实例
Nov 10 Python
python使用datetime模块计算各种时间间隔的方法
Mar 24 Python
为Python程序添加图形化界面的教程
Apr 29 Python
python中map()函数的使用方法示例
Sep 29 Python
hmac模块生成加入了密钥的消息摘要详解
Jan 11 Python
在python中实现对list求和及求积
Nov 14 Python
使用Python正则表达式操作文本数据的方法
May 14 Python
详解python中的数据类型和控制流
Aug 08 Python
Python tkinter常用操作代码实例
Jan 03 Python
TensorFlow实现自定义Op方式
Feb 04 Python
如何理解python中数字列表
May 29 Python
Django配置Bootstrap, js实现过程详解
Oct 13 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
关于Intype一些小问题的解决办法
2008/03/28 PHP
深入eAccelerator与memcached的区别详解
2013/06/06 PHP
php随机显示图片的简单示例
2014/02/15 PHP
php中Session的生成机制、回收机制和存储机制探究
2014/08/19 PHP
PHP 前加at符合@的作用解析
2015/07/31 PHP
php与python实现的线程池多线程爬虫功能示例
2016/10/12 PHP
PHP实现的简单操作SQLite数据库类与用法示例
2017/06/19 PHP
PHP实现断点续传乱序合并文件的方法
2018/09/06 PHP
js计数器代码
2006/11/04 Javascript
超级简单的图片防盗(HTML),好用
2007/04/08 Javascript
Open and Print a Word Document
2007/06/15 Javascript
JavaScript初学者应注意的七个细节详细介绍
2012/12/27 Javascript
基于javascript的COOkie的操作实现只能点一次
2014/12/26 Javascript
javascript实现ecshop搜索框键盘上下键切换控制
2015/03/18 Javascript
BootStrap的alert提示框的关闭后再显示怎么解决
2016/05/17 Javascript
Require.js的基本用法详解
2017/07/03 Javascript
基于Node.js模板引擎教程-jade速学与实战1
2017/09/17 Javascript
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
2018/11/14 Javascript
4 种滚动吸顶实现方式的比较
2019/04/09 Javascript
Vue 中可以定义组件模版的几种方式
2019/08/06 Javascript
使用flow来规范javascript的变量类型
2019/09/12 Javascript
微信小程序左右滚动公告栏效果代码实例
2019/09/16 Javascript
2020京东618叠蛋糕js脚本(亲测好用)
2020/06/02 Javascript
vue 计算属性和侦听器的使用小结
2021/01/25 Vue.js
Python中统计函数运行耗时的方法
2015/05/05 Python
python实现判断一个字符串是否是合法IP地址的示例
2018/06/04 Python
浅析Python 读取图像文件的性能对比
2019/03/07 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
2019/07/19 Python
Python对接支付宝支付自实现功能
2019/10/10 Python
英国最出名高街品牌:Forever Unique
2018/02/24 全球购物
村级环境卫生整治方案
2014/05/04 职场文书
亲子运动会的活动方案
2014/08/17 职场文书
预备党员群众路线思想汇报2014
2014/10/25 职场文书
中国世界遗产导游词
2015/02/13 职场文书
PostGIS的安装与入门使用指南
2022/01/18 PostgreSQL
Win11开始菜单添加休眠选项
2022/04/19 数码科技