python释放端口_Python关于端口复用及线程操作方法

以下代码是Python关于端口复用及线程操作方法,适用于windows和linux系统。

思路是:

(1)判断是否是浏览器提交的数据如果是则将提交的数据转发至本地环回地址的80端口

(2)将服务器发送的数据发回客户端

(3)如果数据不是浏览器提交则将其转发至本地的22端口

(4)使用select函数进行非阻塞操作

#coding=utf-8

import socket

import sys

import select

import threading

host='192.168.99.100'

port=80

#www.iplaypy.com

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

玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/code/other/o2440.html

相关文章 Recommend

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值