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

#!/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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329709.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot的自动化配置原理

转载自 Spring Boot的自动化配置原理 随着Ruby、Groovy等动态语言的流行,相比较之下Java的开发显得格外笨重。繁多的配置、低下的开发效率、复杂的部署流程以及第三方技术集成难度大等问题一直被人们所诟病。随着Spring家族中的新星Spring Boot的诞生,这…

复盘Build 2016:不要错过微软给.NET开发者的这些福利

本文作者陈计节,ThoughtWorks 高级咨询师。多年的跨平台 .NET 开发者,全栈工程师,技术布道师。擅长互联网应用程序的设计、开发和运维等工作。 近年来,微软坚持为社区提供更多灵活性,并以更开放的思路重构其已有平台&a…

java异步线程内存可见性实验

【README】 本文演示了内存可见性的场景,以及解决方法; 相关定义如下(转自java并发编程实战,一本好书,强烈推荐): 内存可见性:一个线程修改了对象状态后, 其他线程可以…

springboot 单例_如何实现一个单例及优化

前言 社长,一个爱学习,爱分享的程序猿,始终相信,付出总会有回报的。 知识改变命运,学习成就未来。爱拼才会赢! 程序猿学社的GitHub,已整理成相关技术专刊,欢迎 Star:。 https:// github.com/ITfqyd/cxyxs 社长,4年api搬运工程师,之前做的都是一些框架的搬运工作,做的时间…

乐观锁的一种实现方式——CAS

转载自 乐观锁的一种实现方式——CAS在深入理解乐观锁与悲观锁一文中我们介绍过锁。本文在这篇文章的基础上,深入分析一下乐观锁的实现机制,介绍什么是CAS、CAS的应用以及CAS存在的问题等。线程安全 众所周知,Java是多线程的。但是&#xff0…

熬夜并不值得程序员炫耀

许多程序嘴上经常挂着每天加班到凌晨三点的论调,但事实上这没什么值得炫耀的,加班通常都是效率低的代名词。 放弃睡眠就像是高利贷借款。没错,看上去你是得到了额外的时间,但你想得太乐观了,你知道代价是什么吗&#x…

前端wxml取后台js变量值_这些鲜为人知的前端冷知识,你都GET了吗?

背景最近公司项目不多,比较清闲,划水摸鱼混迹于各大技术博客平台,瞬间又GET了好多前端技能,一些属于技巧,一些则是闻所未闻的冷知识,一时间还消化不过来,不由的发出一声感叹!前端可真…

(转-这篇文章非常棒) Thread的中断机制(interrupt)

转自: Thread的中断机制(interrupt)-这篇文章非常棒 Thread的中断机制(interrupt) - 寂静沙滩 - 博客园先看收集了别人的文章,全面的了解下java的中断:中断线程线程的thread.interrupt()方法是中断线程,将会设置该线程的中断状态…

深入理解乐观锁与悲观锁

转载自 [初级]深入理解乐观锁与悲观锁在数据库的锁机制中介绍过,数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。 乐观并发控制(乐观锁)和悲观并发控制&a…

Z.ExtensionMethods 一个强大的开源扩展库

今天有意的在博客园里面搜索了一下 Z.ExtensionMethods 这个扩展类库,确发现只搜到跟这个真正相关的才两篇博文而已,我都点进去看了一下,也都只是提到而已,没有专门介绍,才引起我写这篇文档。 一. Z.E…

python isodd奇偶_Python这些位运算的妙用,绝对让你大开眼界

位运算的性能大家想必是清楚的,效率绝对高。相信爱好源码的同学,在学习阅读源码的过程中会发现不少源码使用了位运算。但是为啥在实际编程过程中应用少呢?想必最大的原因,是较为难懂。不过,在面试的过程中,…

java线程中断

【README】 本文po出了不同场景下线程中断的不同开发方式,包括阻塞,非阻塞,io阻塞线程等; 本文部分内容转自:这篇博文写的非常好 Thread的中断机制(interrupt) - 寂静沙滩 - 博客园先看收集了别人的文章&#xff0c…

WEB API系列(一):WEB API的适用场景、第一个实例

在我前一篇博客《WebAPI前置知识:HTTP与RestfulAPI》中已经给各位简单介绍了HTTP协议与RestFul API的关系,以及一些基本的HTTP协议知识,在这些知识的铺垫下,今天,我们一起来讨论一下WEB API的适用场景,然后写我们第一个…

rpa文件怎么提取内容_怎么编辑pdf文件内容?有什么软件可以编辑pdf文件吗?

怎么编辑pdf文件内容?我是2020年大学新生,选择学习的专业是财务管理。为了更快、更深入地了解更多专业知识,我上网查找、下载了很多相关资料。不过,从网上保存下来的资料文件大多是pdf格式的,想要编辑它还得先转word。…

Future取消线程执行

【README】 本文总结于 《java并发编程实战》 page121,非常棒的一本书; 【1】Future 1,介绍:future 用于管理任务的生命周期,处理异常,以及实现取消; 2,future.cancel() 取消方法…

Nancy之结合tinyfox给我们的应用提供简单的数据服务

说到提供数据服务给我们的一些应用,估计用的最多的也就是json和xml这两种数据格式 实现的方法也是多种多样,web api,mvc的jsonresult和contentresult...等等 本文是结合Nancy、TInyFox、Owin等来实现的 一、前提工作 新建一个空的web应用程序 添加相应的…

javaweb调用python算法_请教怎么用java远程调用python? 多谢

请问如何用java远程调用python? 谢谢!本帖最后由 blackkettle 于 2015-05-07 13:00:41 编辑比如有一台机器 A上安装了python, 另一台机器B要用java 调用A 上的python的某个函数,输入数据在B机器上,所有的计算在A机器完成,结果返回…

(转)如何查看java本地方法

在线查看本地代码, refer2 http://hg.openjdk.java.net/jdk8/jdk8/hotspot/file/tip/src/os/linux/vm/os_linux.cpp 我们知道在java中查看java源码时看到native方法在java层面上就到头的,如果还想继续往下看就需要看jdk是如何实现的,今天就分…

统一配置中心的设计方案

转载自 统一配置中心的设计方案对于配置文件,我们不陌生,它提供我们可以动态修改程序运行能力。引用别人的一句话就是:系统运行时(runtime)飞行姿态的动态调整。我可以把我们的工作称之为在快速飞行的飞机上修理零件。我们人类总是无法掌控和…

微软CEO纳德拉恢弘计划:让开发者始终忘不了微软

BI中文站 4月11日 报道 当微软前CEO史蒂夫•鲍尔默(Steve Ballmer)在2000年喊出“开发者,开发者,开发者”的口号时,他可能有点儿激动,但是他的观点是对的。 30年前当Windows 1.0推出的时候,这种…