将套接字流重定向到标准输入或输出流
#!/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()
问题内容: 假定旧版Linux应用程序在UNIX域套接字上侦听。 除了通过UNIX域套接字机制与此旧版应用程序进行通信之外,我还希望能够通过端口1234上的TCP连接来连接到它。 绑定到TCP端口1234,然后将所有传入连接重定向到UNIX域套接字的最简单方法是什么? 问题答案: 原来socat可用于实现此目的: 并增加了一些安全性: 这些示例已经过测试,可以按预期工作。
本文向大家介绍Python原始套接字编程实例解析,包括了Python原始套接字编程实例解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了Python原始套接字编程实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在实验中需要自己构造单独的HTTP数据报文,而使用SOCK_STREAM进行发送数据包,需要进行完整的TCP交互。
我的服务器代码使用将消息发送到特定的套接字,请参阅https://socket.io/docs/emit-cheatsheet/ 但是,当连接坏了,客户机断开并再次连接时,socketId会发生变化,并且会失败。那么如何实现re-emit方法来处理重新连接呢? 我的问题与此相反,socket.io在x秒/第一次尝试获得响应失败后停止重新发出事件,从中我了解到socket.io客户端在重新连接时可以
本文向大家介绍Python实现list反转实例汇总,包括了Python实现list反转实例汇总的使用技巧和注意事项,需要的朋友参考一下 本文实例总结了Python实现list反转的方法。分享给大家供大家参考。具体实现方法如下: 下面有几个不同实现的函数 ps: resv2() 方法会改变原来list的排序,其它则不会 一些关于list基础用法 1.定义list 2.负的list 索引 3.
问题内容: 当我在代码中指定要连接的IP时,我有一个小型的单边消息发送器,但是,我无法让套接字接受来自任何IP的连接。这是问题所在。 该是本地主机,如果我手动输入IP,例如,它的工作原理,但是,我怎么能离开它向所有人开放?还是我为此使用了错误的连接类型? 问题答案: 如果要绑定到所有可用的IPv4地址,请指定为IP地址。如果您在路由器后面,并且希望您的套接字可以通过Internet访问,而不是仅在
我试图使用VMCI套接字在虚拟机和它的主机之间建立一个面向流的连接。我成功地启动了服务器,绑定了一个地址,将其置于监听模式,并调用接受来等待客户端。然而,每当我从客户端调用时,我都会收到一个错误。 我的客户代码是: 每当我使用数据报套接字时,问题并不存在。(当然,不需要调用listen、accept和connect。在这种情况下,我只需使用
问题内容: 从堆栈溢出的其他帖子中应该可以正常工作 但由于某种原因,它只是挂在()上而从不打印。我知道对www.cnn.com的请求将对数据进行分块,但我至少应该从中读取一些信息,对吗? PS我知道这是不是做到这一点的最好办法,而且有像库和在那里,但我不能使用那些为这个项目(这是学校)。我必须使用图书馆 问题答案: 您忘记在请求行之后发送空白行: 此外,HTTP 1.1指定您应添加HTTP 1.1
问题内容: 假设我想使用标准模块从套接字读取一行: 到底发生了什么?每次都会发出系统调用吗?我想无论如何我应该添加一些缓冲: 为了与硬件和网络实际情况达到最佳匹配, bufsize 的值应为2的相对较小的幂,例如4096。 http://docs.python.org/library/socket.html#socket.socket.recv 但是编写高效且线程安全的缓冲似乎并不容易。如果我使用