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中用于计算指数的exp()方法
May 14 Python
python清除字符串里非字母字符的方法
Jul 02 Python
Python黑魔法@property装饰器的使用技巧解析
Jun 16 Python
python中数据爬虫requests库使用方法详解
Feb 11 Python
Python 实现数据结构中的的栈队列
May 16 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
Jul 23 Python
python实现爬虫抓取小说功能示例【抓取金庸小说】
Aug 09 Python
pytorch多进程加速及代码优化方法
Aug 19 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
Aug 23 Python
Python爬虫程序架构和运行流程原理解析
Mar 09 Python
Python 中如何写注释
Aug 28 Python
浅析python中特殊文件和特殊函数
Feb 24 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
漫威DC御用漫画家去世 他的表情包曾走红网络
2020/04/09 欧美动漫
php项目打包方法
2008/02/18 PHP
php存储过程调用实例代码
2013/02/03 PHP
php中文字符串截取方法实例总结
2014/09/30 PHP
Yii框架中memcache用法实例
2014/12/03 PHP
php中switch与ifelse的效率区别及适用情况分析
2015/02/12 PHP
PHP实现动态删除XML数据的方法示例
2018/03/30 PHP
laravel5 Eloquent 实现事务方式
2019/10/21 PHP
PHP函数用法详解【初始化、嵌套、内置函数等】
2020/06/02 PHP
Aster vs Newbee BO5 第一场2.19
2021/03/10 DOTA
javascript 一段左右两边随屏滚动的代码
2009/06/18 Javascript
使用jQuery清空file文件域的解决方案
2013/04/12 Javascript
jquery仿QQ商城带左右按钮控制焦点图片切换滚动效果
2013/06/27 Javascript
node.js入门教程
2014/06/01 Javascript
vue实现仿淘宝结账页面实例代码
2017/11/08 Javascript
vue弹窗组件的实现示例代码
2018/09/10 Javascript
微信小程序 Storage更新详解
2019/07/16 Javascript
Jquery 动态添加元素并添加点击事件实现过程解析
2019/10/12 jQuery
JS实现排行榜文字向上滚动轮播效果
2019/11/26 Javascript
node.js 微信开发之定时获取access_token
2020/02/07 Javascript
JavaScript动态生成表格的示例
2020/11/02 Javascript
详解在Python程序中解析并修改XML内容的方法
2015/11/16 Python
python在文本开头插入一行的实例
2018/05/02 Python
canvas简易绘图的实现(海绵宝宝篇)
2018/07/04 HTML / CSS
美国销售第一的智能手机和平板电脑保护壳:OtterBox
2017/12/21 全球购物
荷兰包包购物网站:The Little Green Bag
2018/03/17 全球购物
中国一家综合的外贸B2C电子商务网站:DealeXtreme(DX)
2020/03/10 全球购物
什么是Deployment descriptors;都有什么类型的部署描述符
2015/07/28 面试题
普师专业个人自荐信范文
2013/11/26 职场文书
劳动竞赛口号
2014/06/16 职场文书
法人委托书范本格式
2014/09/15 职场文书
国家机关领导干部民主生活会对照检查材料思想汇报
2014/09/17 职场文书
2015毕业实习推荐信
2015/03/23 职场文书
2015年全民创业工作总结
2015/07/23 职场文书
在Oracle表中进行关键词搜索的过程
2022/06/10 Oracle
win10忘记pin密码登录不了怎么办?win10忘记pin密码登不进去的解决方法
2022/07/07 数码科技