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

python重定向到socket_python套接字流重定向实例汇总相关推荐

  1. Python之socket(套接字)

    Socket 一.概述 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. ...

  2. Python网络编程——socket套接字实现UDP/TCP信息传输

    socket套接字 socket(简称 套接字) ,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来 ...

  3. Python+socket实现TCP套接字服务端自由限速

    好消息:"Python小屋"编程比赛正式开始 推荐图书: <Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),董付国,清华大学出版社, ...

  4. python编程示例_Python套接字编程–服务器,客户端示例

    python编程示例 Good Day Learners! In our previous tutorial, we discussed about Python unittest module. T ...

  5. Java基础23 网络编程 socket套接字流 TCP传输总结

    一.网络编程的概念 1.计算机网络:将不同地区的计算机,使用网络来进行连接 实现不同地区的数据的交互与共享(互联时代) 2. 网络编程的三要素:IP地址 端口号 协议 3. ip地址:是在网络连接中 ...

  6. python socket.socket()函数 套接字详解及TCP、UDP程序示例(粘包等)

    文章目录 socket的定义 套接字的工作流程 socket函数使用 socket函数用法 服务端套接字函数 客户端套接字函数 公共用途的套接字函数 面向文件的套接字方法 打电话的流程演示 服务端.p ...

  7. 基本sctp套接字编程及实例讲解

    ​ 工作中使用到了5g核心网开源代码open5gs,其中的协议部分sctp在<Unix网络编程>部分遇到过,谨以此再回顾一下sctp的一些知识. 一. SCTP简介 ​ SCTP (Str ...

  8. python写一个app接收摄像头传输的视频_如何使用Python中的tcp套接字发送和接收网络摄像头流?...

    我正在尝试重新创建this project.我有一台服务器(我的电脑)和一台客户机(我的树莓皮).我所做的与最初的项目不同的是,我尝试使用一个简单的网络摄像头而不是一个覆盆子pi相机将图像从我的rpi ...

  9. Python网络编程—TCP套接字之HTTP传输

    HTTP协议 (超文本传输协议) 1.用途 : 网页获取,数据的传输 2.特点: 应用层协议,传输层使用tcp传输 简单,灵活,很多语言都有HTTP专门接口 无状态,协议不记录传输内容 http1.1 ...

最新文章

  1. ie与firefox 关于js 的差别(转载)
  2. WPF之DataGrid篇:DataGridComboBoxColumn
  3. 为Web应用建立基于JMX的管理系统
  4. cent 8.0 安装tomcat 9.0_Linux服务器:安装tomcat并部署war应用
  5. 浙工商电信闪讯老毛子路由器设置
  6. qqxml卡片 php代码,qqxml卡
  7. elementUI使用el-tabs时,页面崩溃卡死问题
  8. 求有限区间内素数个数
  9. exlc表格怎么换行_excel怎么换行 excel表格内如何换行
  10. 软件测试--软件测试执行管理
  11. js中判断空数组和空对象的方法
  12. 计算机组成原理学习之路(一)——数据表示
  13. Xcode 下载加速及安装指南
  14. 现在接受参加国际创业节 DOer Express的 申请
  15. 解决了ora-00119和ora-00132这个问题,不容易啊
  16. 推荐 15 款编程游戏,从此谁都可以学编程!
  17. 我的股票交易成长经历
  18. 信息收集后的数据处理小技巧
  19. Django 运行报错 Manager isnt accessible via Category instances
  20. Python每日一学 08——get()方法学习

热门文章

  1. 自适应辛普森(算法简要 + 模板)
  2. Codeforces Round #630 (Div. 2) F. Independent Set 树形dp
  3. 【LOJ6363】「地底蔷薇」【点双】【指数型生成函数】【扩展拉格朗日反演】【多项式幂函数】
  4. Cell Phone Network
  5. [TJOI2013]拯救小矮人(反悔贪心证明),「ICPC World Finals 2019」Hobson 的火车(基环树,差分)
  6. CF587F-Duff is Mad【AC自动机,根号分治】
  7. P5341-[TJOI2019]甲苯先生和大中锋的字符串【SAM】
  8. jzoj4010-Philips and Calculator【搜索,dp】
  9. jzoj3913-艰难的选择【差分,统计】
  10. P1032-字串变换【bfs】