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数据结构之图的实现方法
Jul 08 Python
python中如何使用朴素贝叶斯算法
Apr 06 Python
Python中asyncio模块的深入讲解
Jun 10 Python
pycharm访问mysql数据库的方法步骤
Jun 18 Python
Python 类的私有属性和私有方法实例分析
Sep 29 Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
Mar 23 Python
Python如何根据时间序列数据作图
May 12 Python
Python如何设置指定窗口为前台活动窗口
Aug 12 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
Aug 27 Python
使用豆瓣源来安装python中的第三方库方法
Jan 26 Python
python单例模式的应用场景实例讲解
Feb 24 Python
Python编写冷笑话生成器
Apr 20 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 access 数据连接与读取保存编辑数据的实现代码
2010/05/12 PHP
Python中使用django form表单验证的方法
2017/01/16 PHP
php中序列化与反序列化详解
2017/02/13 PHP
解决laravel资源加载路径设置的问题
2019/10/14 PHP
event对象的方法 兼容多浏览器
2009/06/27 Javascript
基于JQuery实现的类似购物商城的购物车
2011/12/06 Javascript
javascript 基础篇2 数据类型,语句,函数
2012/03/14 Javascript
『jQuery』名称冲突使用noConflict方法解决
2013/04/22 Javascript
关于include标签导致js路径找不到的问题分析及解决
2013/07/09 Javascript
JS关闭窗口与JS关闭页面的几种方法小结
2013/12/17 Javascript
分享9点个人认为比较重要的javascript 编程技巧
2015/04/27 Javascript
js实现首屏延迟加载实现方法 js实现多屏单张图片延迟加载效果
2017/07/17 Javascript
vue+mockjs模拟数据实现前后端分离开发的实例代码
2017/08/08 Javascript
详解vue-cli项目中用json-sever搭建mock服务器
2017/11/02 Javascript
vue cli构建的项目中请求代理与项目打包问题
2018/02/26 Javascript
angularjs使用gulp-uglify压缩后执行报错的解决方法
2018/03/07 Javascript
jquery实现垂直手风琴菜单
2020/03/04 jQuery
Vue中通过vue-router实现命名视图的问题
2020/04/23 Javascript
vuex Module将 store 分割成模块的操作
2020/12/07 Vue.js
[02:14]2016国际邀请赛中国区预选赛Ehome晋级之路
2016/07/01 DOTA
python中使用enumerate函数遍历元素实例
2014/06/16 Python
python编程测试电脑开启最大线程数实例代码
2018/02/09 Python
浅谈python中get pass用法
2019/03/19 Python
python 生成器和迭代器的原理解析
2019/10/12 Python
Python FFT合成波形的实例
2019/12/04 Python
python利用opencv实现SIFT特征提取与匹配
2020/03/05 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
2020/12/11 Python
基于DOM+CSS3实现OrgChart组织结构图插件
2016/03/02 HTML / CSS
HTML5 画布canvas使用方法
2016/03/18 HTML / CSS
巴西手表购物网站:eclock
2019/03/19 全球购物
西班牙最大的婴儿用品网上商店:Bebitus
2019/05/30 全球购物
中专毕业个人的自荐信格式
2013/09/21 职场文书
电子商务优秀毕业生求职信
2014/07/11 职场文书
先进班集体申报材料
2014/12/26 职场文书
《和时间赛跑》读后感3篇
2019/12/16 职场文书
用JS创建一个录屏功能
2021/11/11 Javascript