流重定向实用程序

为了说明makefile方法的操作,下面的代码实现了多种重定向方案,其把调用者流重定向到一个用于另一个会话进程的套接字上。它的第一个函数和输出相连。当然,由socket.makefile返回的封装对象,也可以与直接文件接口的read和write方法调用和独立的标准流一起使用。

__author__ = 'JianqingJiang'
# -*- coding: utf-8 -*-
#用于连接非GUI程序的标准流到套接字的工具,一个GUI(或其他)程序可以使用这个与非GUI程序进行交互
import sys
from socket import *
port = 50008
host = 'localhost'

def initListenerSocket(port=port):
    #初始化在服务器模式下调用者用于监听的连接套接字
    sock = socket(AF_INET,SOCK_STREAM)
    sock.bind(('',port))
    sock.listen(5)
    conn,addr = sock.accept()
    return conn

def redirectOut(port=port,host=host):
    #在接收之前其他连接失败,连接调用者标准输出流到一个套接字,这个套接字用于GUI监听,在收到者启动后,启动调用者
    sock = socket(AF_INET,SOCK_STREAM)
    sock.connect((host,port))
    file = sock.makefile('w')
    sys.stdout = file
    return sock

def redirectIn(port=port,host=host):
    #连接调用者标准输入流到用于GUI来提供功能的套接字
    sock = socket(AF_INET,SOCK_STREAM)
    sock.connect((host,port))
    file = sock.makefile('r')
    sys.stdin = file
    return sock

def redirectBothAsClient(port=port,host=host):
    #在这种模式下,连接调用者标准输入和输出流到相同的套接字,调用者对于服务器来说就是客户端:发送消息,接受响应答复
    sock = socket(AF_INET,SOCK_STREAM)
    sock.connect((host,port))
    ofile = sock.makefile('w')
    iflie = sock.makefile('r')
    sys.stdout = ofile
    sys.stdin = iflie
    return sock

def redirectBothAsServer(port=port,host=host):
    #在这种模式下,连接调用者标准输入和输出流到相同的套接字,调用者对于客户端来说就是服务器:接受消息,发送响应答复
    sock = socket(AF_INET,SOCK_STREAM)
    sock.bind(('',port))
    sock.listen(5)
    conn,addr = sock.accept()
    ofile = sock.makefile('w')
    iflie = sock.makefile('r')
    sys.stdout = ofile
    sys.stdin = iflie
    return conn

从二进制到文本的转换

原始套接字可以传输二进制字节字符串,但是在文本模式下打开封装文件,它们的内容在输入和输出时会自动转换成文本字符串。如果通过标准流工具,如可以写入文本字符串print内置函数,可以获得,那么就需要文字模式文件封装。然而,在大多数情况中,直接处理原始套接字时,文本仍需手动编码为字节字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值