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之PyUnit单元测试实例
Oct 11 Python
python 性能提升的几种方法
Jul 15 Python
python中快速进行多个字符替换的方法小结
Dec 15 Python
Python基于scapy实现修改IP发送请求的方法示例
Jul 08 Python
python实现决策树分类算法
Dec 21 Python
python可视化实现KNN算法
Oct 16 Python
python实现从wind导入数据
Dec 03 Python
如何基于python操作json文件获取内容
Dec 24 Python
python全局变量引用与修改过程解析
Jan 07 Python
在PyTorch中使用标签平滑正则化的问题
Apr 03 Python
Python文件操作模拟用户登陆代码实例
Jun 09 Python
什么是python的必选参数
Jun 21 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
怎样在UNIX系统下安装MySQL
2006/10/09 PHP
PHP5中的时间相差8小时的解决办法
2008/03/28 PHP
php Smarty 字符比较代码
2011/02/27 PHP
利用PHP实现一个简单的用户登记表示例
2017/04/25 PHP
PHP实现正则表达式分组捕获操作示例
2018/02/03 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
2019/10/16 PHP
jquery 查找iframe父级页面元素的实现代码
2011/08/28 Javascript
举例简介AngularJS的内部语言环境
2015/06/17 Javascript
鼠标经过子元素触发mouseout,mouseover事件的解决方案
2015/07/26 Javascript
JavaScript字符串常用的方法
2016/03/10 Javascript
JS使用正则实现去掉字符串左右空格的方法
2016/12/27 Javascript
angularjs中ng-attr的用法详解
2016/12/31 Javascript
微信小程序中form 表单提交和取值实例详解
2017/04/20 Javascript
微信小程序自定义轮播图
2018/11/04 Javascript
详解jquery和vue对比
2019/04/16 jQuery
layui表格 列自动适应大小失效的解决方法
2019/09/06 Javascript
基于layui的下拉列表的数据回显方法
2019/09/24 Javascript
HTML+JavaScript实现扫雷小游戏
2019/09/30 Javascript
vue elementui 实现搜索栏公共组件封装的实例代码
2020/01/20 Javascript
vue + el-form 实现的多层循环表单验证
2020/11/25 Vue.js
[02:08]我的刀塔不可能这么可爱 胡晓桃_1
2014/06/20 DOTA
python实现在windows服务中新建进程的方法
2015/06/30 Python
python numpy数组的索引和切片的操作方法
2018/10/20 Python
使用Python实现从各个子文件夹中复制指定文件的方法
2018/10/25 Python
对python周期性定时器的示例详解
2019/02/19 Python
python循环嵌套的多种使用方法解析
2019/11/29 Python
解决Numpy中sum函数求和结果维度的问题
2019/12/06 Python
如何基于Python代码实现高精度免费OCR工具
2020/06/18 Python
python图片验证码识别最新模块muggle_ocr的示例代码
2020/07/03 Python
AmazeUI 按钮交互的实现示例
2020/08/24 HTML / CSS
ASOS西班牙官网:英国在线时尚和美容零售商
2020/01/10 全球购物
大型活动策划方案
2014/01/12 职场文书
《三顾茅庐》教学反思
2014/04/10 职场文书
诚信考试倡议书
2014/04/15 职场文书
复活读书笔记
2015/06/29 职场文书
遇事可以测出您的见识与格局
2019/09/16 职场文书