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 各种删除文件失败的处理方式分享
Apr 24 Python
PyTorch快速搭建神经网络及其保存提取方法详解
Apr 28 Python
Python面向对象程序设计之继承与多继承用法分析
Jul 13 Python
对Python 内建函数和保留字详解
Oct 15 Python
如何使用python把ppt转换成pdf
Jun 29 Python
Python OpenCV图像指定区域裁剪的实现
Oct 30 Python
如何基于python生成list的所有的子集
Nov 11 Python
python不使用for计算两组、多个矩形两两间的iou方式
Jan 18 Python
Pycharm2020.1安装中文语言插件的详细教程(不需要汉化)
Aug 07 Python
Ubuntu权限不足无法创建文件夹解决方案
Nov 14 Python
python中四舍五入的正确打开方式
Jan 18 Python
pytorch实现加载保存查看checkpoint文件
Jul 15 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
织梦模板标记简介
2007/03/11 PHP
基于php验证码函数的使用示例
2013/05/03 PHP
PHP中SimpleXML函数用法分析
2014/11/26 PHP
对PHP PDO的一些认识小结
2015/01/23 PHP
php下载文件超时时间的设置方法
2016/10/06 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
[原创]PHP实现SQL语句格式化功能的方法
2017/07/28 PHP
PHP编程实现计算抽奖概率算法完整实例
2017/08/09 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
php从数据库读取数据,并以json格式返回数据的方法
2018/08/21 PHP
jquery实现的超出屏幕时把固定层变为定位层的代码
2010/02/23 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
jQuery实现页面滚动时动态加载内容的方法
2015/03/20 Javascript
充分发挥Node.js程序性能的一些方法介绍
2015/06/23 Javascript
angularjs实现的购物金额计算工具示例
2018/05/08 Javascript
小程序多图列表实现性能优化的方法步骤
2019/05/28 Javascript
js简单的分页器插件代码实例
2019/09/11 Javascript
Vue程序化的事件监听器(实例方案详解)
2020/01/07 Javascript
js实现数据导出为EXCEL(支持大量数据导出)
2020/03/31 Javascript
VUE 单页面使用 echart 窗口变化时的用法
2020/07/30 Javascript
把大数据数字口语化(python与js)两种实现
2013/02/21 Python
python 字典(dict)遍历的四种方法性能测试报告
2014/06/25 Python
10种检测Python程序运行时间、CPU和内存占用的方法
2015/04/01 Python
利用python代码写的12306订票代码
2015/12/20 Python
基于python的Tkinter编写登陆注册界面
2017/06/30 Python
详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
2020/04/01 Python
python时间序列数据转为timestamp格式的方法
2020/08/03 Python
详解CSS3中的box-sizing(content-box与border-box)
2019/04/19 HTML / CSS
在HTML5 canvas里用卷积核进行图像处理的方法
2018/05/02 HTML / CSS
HTML5制作表格样式
2016/11/15 HTML / CSS
区域销售经理职责
2013/12/22 职场文书
分公司总经理岗位职责
2014/07/30 职场文书
客户答谢会致辞
2015/01/20 职场文书
2015年酒店前台工作总结
2015/04/20 职场文书
《狼王梦》读后感:可怜天下父母心
2019/11/01 职场文书
看看如何用Python绘制小米新版天价logo
2021/04/20 Python