ストリームリダイレクトユーティリティ
3591 ワード
makefileメソッドの動作を説明するために、次のコードは、呼び出し元ストリームを別のセッションプロセスのソケットにリダイレクトする複数のリダイレクトスキームを実現する.その最初の関数は出力に接続されています.もちろん、socket.makefileが返すカプセル化オブジェクトは、直接ファイルインタフェースのreadメソッドとwriteメソッド呼び出しと独立した標準ストリームとともに使用することもできます.
バイナリからテキストへの変換
元のソケットはバイナリバイト文字列を転送できますが、テキストモードでパッケージファイルを開き、入力と出力時に自動的にテキスト文字列に変換されます.標準ストリームツールを使用して、テキスト文字列print内蔵関数を書き込むことができれば、文字モードファイルのカプセル化が必要です.しかし、ほとんどの場合、元のソケットを直接処理する場合、テキストは手動でバイト文字列に符号化する必要があります.
__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内蔵関数を書き込むことができれば、文字モードファイルのカプセル化が必要です.しかし、ほとんどの場合、元のソケットを直接処理する場合、テキストは手動でバイト文字列に符号化する必要があります.