Python实现端口复用实例代码


Posted in Python onJuly 03, 2014

本文介绍Python实现端口复用实例如下所示:

#coding=utf-8
import socket
import sys
import select
import threading
host='192.168.99.100'
port=80
class Thread(threading.Thread):
  def __init__(self,buf,sockfd):
    threading.Thread.__init__(self)
    self.buf=buf
    self.sockfd=sockfd
  def run(self):
   if len(self.buf)!=0:
    if 'GET' in self.buf :  #判断是否是浏览器提交的数据如果是则将提交的数据转发至本地环回地址的80端口
     s2=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
     s2.connect(('127.0.0.1',80))
     s2.send(self.buf)
     bufer=''
     while 1:
      recv_data=s2.recv(1024)
      bufer+=recv_data
      if len(recv_data)==0:
       break
     print bufer,len(bufer)
     if len(bufer)==0:
      pass     
     self.sockfd.send(bufer)  #将服务器发送的数据发回客户端
     s2.close
     self.sockfd.close
     sys.exit()
    else:
     'ps:connect to ssh' #如果数据不是浏览器提交则将其转发至本地的22端口
     s2=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
     s2.connect(('127.0.0.1',22))
     s2.send(self.buf)
     recv_data=s2.recv(4096)
     conn.send(recv_data)
     self.sockfd.close
     s2.close
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.setsockopt( socket.SOL_SOCKET, socket.SO_REUSEADDR, 1 ) #端口复用的关键点
s.bind((host,port))
s.listen(10)
while 1:
 infds,outfds,errfds=select.select([s,],[],[],5) #使用select函数进行非阻塞操作
 if len(infds)!=0:
  conn,(addr,port)=s.accept()
  print 'connected by',addr,port
  data=conn.recv(1024)
  t=Thread(data,conn)
  t.start()
s.close
#coding=utf-8
import socket
import sys
import select
import threading
host='192.168.99.100'
port=80
class Thread(threading.Thread):
  def __init__(self,buf,sockfd):
    threading.Thread.__init__(self)
    self.buf=buf
    self.sockfd=sockfd
  def run(self):
   if len(self.buf)!=0:
    if 'GET' in self.buf :  #判断是否是浏览器提交的数据如果是则将提交的数据转发至本地环回地址的80端口
     s2=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
     s2.connect(('127.0.0.1',80))
     s2.send(self.buf)
     bufer=''
     while 1:
      recv_data=s2.recv(1024)
      bufer+=recv_data
      if len(recv_data)==0:
       break
     print bufer,len(bufer)
     if len(bufer)==0:
      pass     
     self.sockfd.send(bufer)  #将服务器发送的数据发回客户端
     s2.close
     self.sockfd.close
     sys.exit()
    else:
     'ps:connect to ssh' #如果数据不是浏览器提交则将其转发至本地的22端口
     s2=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
     s2.connect(('127.0.0.1',22))
     s2.send(self.buf)
     recv_data=s2.recv(4096)
     conn.send(recv_data)
     self.sockfd.close
     s2.close
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.setsockopt( socket.SOL_SOCKET, socket.SO_REUSEADDR, 1 ) #端口复用的关键点
s.bind((host,port))
s.listen(10)
while 1:
 infds,outfds,errfds=select.select([s,],[],[],5) #使用select函数进行非阻塞操作
 if len(infds)!=0:
  conn,(addr,port)=s.accept()
  print 'connected by',addr,port
  data=conn.recv(1024)
  t=Thread(data,conn)
  t.start()
s.close

例子2

import socket
tcp1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#在绑定前调用setsockopt让套接字允许地址重用
tcp1.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
tcp2.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
 #接下来两个套接字都也可以绑定到同一个端口上
tcp1.bind(('0.0.0.0', 12345))
tcp2.bind(('0.0.0.0', 12345))
import socket
tcp1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#在绑定前调用setsockopt让套接字允许地址重用
tcp1.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
tcp2.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
 #接下来两个套接字都也可以绑定到同一个端口上
tcp1.bind(('0.0.0.0', 12345))
tcp2.bind(('0.0.0.0', 12345))

例子3

重定向

import socket,os
bufLen = 4*1024
sock1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sock1.bind(('192.168.168.100', 8000)) 
sock1.listen(5) 
sock2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sock2.connect(('192.168.168.100', 12345)) 
while True:
    connection,address = sock1.accept() 
    buf = connection.recv(bufLen) 
    #print buf      
    sock2.send(buf) 
    connection.send(sock2.recv(bufLen))
    connection.close()
import socket,os
bufLen = 4*1024
sock1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sock1.bind(('192.168.168.100', 8000)) 
sock1.listen(5) 
sock2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sock2.connect(('192.168.168.100', 12345)) 
while True:
    connection,address = sock1.accept() 
    buf = connection.recv(bufLen) 
    #print buf      
    sock2.send(buf) 
    connection.send(sock2.recv(bufLen))
    connection.close()
Python 相关文章推荐
Python内置的字符串处理函数整理
Jan 29 Python
用Python脚本生成Android SALT扰码的方法
Sep 18 Python
Python中为feedparser设置超时时间避免堵塞
Sep 28 Python
Python中zip()函数的简单用法举例
Sep 02 Python
Pytorch之卷积层的使用详解
Dec 31 Python
python对象销毁实例(垃圾回收)
Jan 16 Python
Python实现遗传算法(二进制编码)求函数最优值方式
Feb 11 Python
Python通过Tesseract库实现文字识别
Mar 05 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
May 22 Python
python报错: 'list' object has no attribute 'shape'的解决
Jul 15 Python
通俗易懂了解Python装饰器原理
Sep 17 Python
Matplotlib animation模块实现动态图
Feb 25 Python
在 Django/Flask 开发服务器上使用 HTTPS
Jul 03 #Python
采用python实现简单QQ单用户机器人的方法
Jul 03 #Python
centos系统升级python 2.7.3
Jul 03 #Python
python实现定制交互式命令行的方法
Jul 03 #Python
小结Python用fork来创建子进程注意事项
Jul 03 #Python
在Windows8上的搭建Python和Django环境
Jul 03 #Python
Win7上搭建Cocos2d-x 3.1.1开发环境
Jul 03 #Python
You might like
php生成随机密码的三种方法小结
2010/09/04 PHP
批量获取memcache值并按key的顺序返回的实现代码
2011/06/14 PHP
ThinkPHP模版中导入CSS和JS文件的方法
2014/11/29 PHP
php从完整文件路径中分离文件目录和文件名的方法
2015/03/13 PHP
ThinkPHP 在阿里云上的nginx.config配置实例详解
2017/10/11 PHP
基于thinkphp6.0的success、error实现方法
2019/11/05 PHP
关于js中for in的缺陷浅析
2013/12/02 Javascript
关于页面嵌入swf覆盖div层的问题的解决方法
2014/02/11 Javascript
JS设置cookie、读取cookie、删除cookie
2015/04/17 Javascript
jQuery div拖拽用法实例
2016/01/14 Javascript
JS简单实现仿百度控制台输出信息效果
2016/09/04 Javascript
原生JS轮播图插件
2017/02/09 Javascript
使用BootStrap实现标签切换原理解析
2017/03/14 Javascript
js匿名函数使用&传参(实例)
2017/09/08 Javascript
解决npm管理员身份install时出现权限的问题
2018/03/16 Javascript
详解Webstorm 下的Angular2.0开发之路(图文)
2018/12/06 Javascript
layui按条件隐藏表格列的实例
2019/09/19 Javascript
Python多层嵌套list的递归处理方法(推荐)
2016/06/08 Python
Python中的字符串替换操作示例
2016/06/27 Python
python仿evething的文件搜索器实例代码
2019/05/13 Python
python 随机森林算法及其优化详解
2019/07/11 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
2020/02/27 Python
基于注解实现 SpringBoot 接口防刷的方法
2021/03/02 Python
让IE9以下版本的浏览器兼容HTML5的方法
2014/03/12 HTML / CSS
美国隐形眼镜零售商:LensPure
2019/03/10 全球购物
介绍一下linux的文件系统
2015/10/06 面试题
物流仓储实习自我鉴定
2013/09/25 职场文书
校园摄影活动策划方案
2014/02/05 职场文书
班训口号大全
2014/06/18 职场文书
授权委托书
2014/07/31 职场文书
私营公司诉讼代理委托书范本
2014/09/13 职场文书
群众路线对照检查材料
2014/09/22 职场文书
先进个人事迹材料
2014/12/29 职场文书
唱歌比赛拉拉队口号
2015/12/25 职场文书
关于考试抄袭的检讨书
2019/11/02 职场文书
Android开发之底部导航栏的快速实现
2022/04/28 Java/Android