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中操作字典之update()方法的使用
May 22 Python
Python爬虫实现百度图片自动下载
Feb 04 Python
浅谈python日志的配置文件路径问题
Apr 28 Python
Python实现爬虫从网络上下载文档的实例代码
Jun 13 Python
anaconda如何查看并管理python环境
Jul 05 Python
200行python代码实现2048游戏
Jul 17 Python
python requests指定出口ip的例子
Jul 25 Python
win10系统Anaconda和Pycharm的Tensorflow2.0之CPU和GPU版本安装教程
Dec 03 Python
pytorch自定义二值化网络层方式
Jan 07 Python
python ubplot使用方法解析
Jan 10 Python
在tensorflow中实现去除不足一个batch的数据
Jan 20 Python
Python Django框架介绍之模板标签及模板的继承
May 27 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 的异常处理、错误的抛出及回调函数等面向对象的错误处理方法
2012/12/07 PHP
PHP缓存集成库phpFastCache用法
2014/12/15 PHP
最近项目写了一些js,水平有待提高
2009/01/31 Javascript
CSS鼠标响应事件经过、移动、点击示例介绍
2013/09/04 Javascript
讨论html与javascript在浏览器中的加载顺序问题
2013/11/27 Javascript
编写高效jQuery代码的4个原则和5个技巧
2014/04/24 Javascript
Javascript中的异步编程规范Promises/A详细介绍
2014/06/06 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
JS触发服务器控件的单击事件(详解)
2016/08/06 Javascript
JS碰撞运动实现方法详解
2016/12/15 Javascript
node.js中debug模块的简单介绍与使用
2017/04/25 Javascript
JavaScript瀑布流布局实现代码
2017/05/06 Javascript
vue element-ul实现展开和收起功能的实例代码
2020/11/25 Vue.js
Python中的字符串替换操作示例
2016/06/27 Python
Python清空文件并替换内容的实例
2018/10/22 Python
Django之创建引擎索引报错及解决详解
2019/07/17 Python
python django下载大的csv文件实现方法分析
2019/07/19 Python
Pytorch反向求导更新网络参数的方法
2019/08/17 Python
python误差棒图errorbar()函数实例解析
2020/02/11 Python
在python image 中实现安装中文字体
2020/05/16 Python
初学者学习Python好还是Java好
2020/05/26 Python
Python unittest单元测试openpyxl实现过程解析
2020/05/27 Python
五种Python转义表示法
2020/11/27 Python
用pushplus+python监控亚马逊到货动态推送微信
2021/01/29 Python
钉钉企业内部H5微应用开发详解
2020/05/12 HTML / CSS
品恩科技软件测试面试题
2014/10/26 面试题
既然说Ruby中一切都是对象,那么Ruby中类也是对象吗
2013/01/26 面试题
金属材料工程个人求职的自我评价
2013/12/04 职场文书
个人求职信范例
2014/01/29 职场文书
11.9消防日宣传标语
2014/10/08 职场文书
《西门豹》教学反思
2016/02/23 职场文书
二年级作文之动物作文
2019/11/13 职场文书
Vue全家桶入门基础教程
2021/05/14 Vue.js
python 实现两个变量值进行交换的n种操作
2021/06/02 Python
简单聊一聊SQL注入及防止SQL注入
2022/03/23 MySQL
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
2022/04/21 Python