• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

python套接字流重定向实例汇总

python 搞代码 4年前 (2022-01-09) 35次浏览 已收录 0个评论

将套接字流重定向到标准输入或输出流

#!/usr/bin/env python3"""测试socket-stream 重定向模式"""import sys,os,timefrom multiprocessing import Processfrom 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<strong style="color:transparent">来源gaodai#ma#com搞@代~码$网</strong>)) 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()

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:python套接字流重定向实例汇总
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址