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 24 Python
Python 基础教程之str和repr的详解
Aug 20 Python
Python实现图片滑动式验证识别方法
Nov 09 Python
Python实现控制台中的进度条功能代码
Dec 22 Python
Python实现的简单计算器功能详解
Aug 25 Python
python+unittest+requests实现接口自动化的方法
Nov 29 Python
python 返回一个列表中第二大的数方法
Jul 09 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
Oct 28 Python
python opencv实现gif图片分解的示例代码
Dec 13 Python
Python标准库shutil模块使用方法解析
Mar 10 Python
Python数据可视化实现多种图例代码详解
Jul 14 Python
Django模板报TemplateDoesNotExist异常(亲测可行)
Dec 18 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里的JS打印函数
2006/10/09 PHP
将RTF格式的文件转成HTML并在网页中显示的代码
2006/10/09 PHP
php过滤危险html代码
2008/08/18 PHP
PHP中获取变量的变量名的一段代码的bug分析
2011/07/07 PHP
给moz-firefox下添加IE方法和属性
2007/04/10 Javascript
javascript优先加载笔记代码
2008/09/30 Javascript
用jquery实现下拉菜单效果的代码
2010/07/25 Javascript
基于JQuery的访问WebService的代码(可访问Java[Xfire])
2010/11/19 Javascript
深入理解javascript变量声明
2014/11/20 Javascript
浅谈Javascript数组索引
2015/07/29 Javascript
基于jquery实现ajax无刷新评论
2020/08/19 Javascript
详解JavaScript中数组的reduce方法
2016/12/02 Javascript
angular仿支付宝密码框输入效果
2017/03/25 Javascript
微信小程序 页面跳转如何实现传值
2017/04/05 Javascript
jquery实现简单实用的轮播器
2017/05/23 jQuery
JavaScript内存泄漏的处理方式
2017/11/20 Javascript
React.js绑定this的5种方法(小结)
2018/06/05 Javascript
jQuery实现动态生成年月日级联下拉列表示例
2019/05/11 jQuery
Vue实现回到顶部和底部动画效果
2019/07/31 Javascript
通过实例了解Nodejs模块系统及require机制
2020/07/16 NodeJs
利用python获取某年中每个月的第一天和最后一天
2016/12/15 Python
分享vim python缩进等一些配置
2018/07/02 Python
python地震数据可视化详解
2019/06/18 Python
Atom Python 配置Python3 解释器的方法
2019/08/28 Python
CSS3动画效果回调处理详解
2014/12/10 HTML / CSS
HTML5本地存储localStorage、sessionStorage基本用法、遍历操作、异常处理等
2014/05/08 HTML / CSS
全球速卖通:AliExpress(国际版淘宝)
2017/09/20 全球购物
奥巴马演讲稿
2014/01/08 职场文书
物理力学求职信
2014/02/18 职场文书
财务担保书范文
2014/04/02 职场文书
希特勒经典演讲稿
2014/05/19 职场文书
公司的门卫岗位职责
2014/09/09 职场文书
同意落户证明
2015/06/19 职场文书
2015年十月一日放假通知
2015/08/18 职场文书
Mysql效率优化定位较低sql的两种方式
2021/05/26 MySQL
SqlServer数据库远程连接案例教程
2021/07/15 SQL Server