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


Posted in Python onMarch 03, 2016

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

#!/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 相关文章推荐
python连接sql server乱码的解决方法
Jan 28 Python
python三元运算符实现方法
Dec 17 Python
Python的Flask框架及Nginx实现静态文件访问限制功能
Jun 27 Python
python web自制框架之接受url传递过来的参数实例
Dec 17 Python
python中的列表与元组的使用
Aug 08 Python
让你的Python代码实现类型提示功能
Nov 19 Python
django使用JWT保存用户登录信息
Apr 22 Python
Pymysql实现往表中插入数据过程解析
Jun 02 Python
Python基础教程(一)——Windows搭建开发Python开发环境
Jul 20 Python
Python getattr()函数使用方法代码实例
Aug 10 Python
python执行js代码的方法
May 13 Python
pycharm无法安装cv2模块问题
May 20 Python
Python设计模式中单例模式的实现及在Tornado中的应用
Mar 02 #Python
Python使用设计模式中的责任链模式与迭代器模式的示例
Mar 02 #Python
详解Python设计模式编程中观察者模式与策略模式的运用
Mar 02 #Python
Python设计模式编程中解释器模式的简单程序示例分享
Mar 02 #Python
分析Python中设计模式之Decorator装饰器模式的要点
Mar 02 #Python
实例解析Python设计模式编程之桥接模式的运用
Mar 02 #Python
Python随机生成带特殊字符的密码
Mar 02 #Python
You might like
启用Csrf后POST数据时出现的400错误
2015/07/05 PHP
基于JQuery的一句代码实现表格的简单筛选
2010/07/26 Javascript
jQuery UI Dialog控件中的表单无法正常提交的解决方法
2010/12/19 Javascript
Js 去掉字符串中的空格(实现代码)
2013/11/19 Javascript
jquery实现类似EasyUI的页面布局可改变左右的宽度
2020/09/12 Javascript
使用jquery判断一个元素是否含有一个指定的类(class)实例
2017/02/12 Javascript
JavaScript canvas实现围绕旋转动画
2017/11/18 Javascript
JS原型继承四步曲及原型继承图一览
2017/11/28 Javascript
Vue.js通用应用框架-Nuxt.js的上手教程
2017/12/25 Javascript
简单的三步vuex入门
2018/05/20 Javascript
JS实现显示当前日期的实例代码
2018/07/03 Javascript
使用mpvue搭建一个初始小程序及项目配置方法
2018/12/03 Javascript
原生js实现照片墙效果
2020/10/13 Javascript
Python3访问并下载网页内容的方法
2015/07/28 Python
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
2016/12/15 Python
django模板语法学习之include示例详解
2017/12/17 Python
利用python解决mysql视图导入导出依赖的问题
2017/12/17 Python
Tensorflow之构建自己的图片数据集TFrecords的方法
2018/02/07 Python
对python中Matplotlib的坐标轴的坐标区间的设定实例讲解
2018/05/25 Python
Django代码性能优化与Pycharm Profile使用详解
2018/08/26 Python
python实现梯度下降算法
2020/03/24 Python
pandas将多个dataframe以多个sheet的形式保存到一个excel文件中
2019/10/10 Python
TensorBoard 计算图的查看方式
2020/02/15 Python
jupyter notebook 多行输出实例
2020/04/09 Python
SQL Server数据库笔试题和答案
2016/02/04 面试题
杭州-飞时达软件有限公司.net笔面试
2012/04/28 面试题
劳资人员岗位职责
2013/12/19 职场文书
咖啡蛋糕店创业计划书
2014/01/28 职场文书
幼儿园中班区域活动总结
2014/07/09 职场文书
2014年健康教育工作总结
2014/11/20 职场文书
资料员岗位职责
2015/02/10 职场文书
学校教师培训工作总结
2015/10/14 职场文书
2016年教师节贺卡寄语
2015/12/04 职场文书
2016党员党课心得体会
2016/01/07 职场文书
2016优秀毕业生个人事迹材料
2016/02/29 职场文书
欧元符号 €
2022/02/17 杂记