国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python實現端口復用實例代碼

2019-11-25 18:21:03
字體:
來源:轉載
供稿:網友

本文介紹Python實現端口復用實例如下所示:

#coding=utf-8import socketimport sysimport selectimport threadinghost='192.168.99.100'port=80class 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.closes=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-8import socketimport sysimport selectimport threadinghost='192.168.99.100'port=80class 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.closes=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 sockettcp1 = 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 sockettcp1 = 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,osbufLen = 4*1024sock1 = 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,osbufLen = 4*1024sock1 = 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()
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 台州市| 东辽县| 轮台县| 山东省| 河东区| 北海市| 南皮县| 兴国县| 宜良县| 吉首市| 西畴县| 望奎县| 沙田区| 靖安县| 哈密市| 岚皋县| 榕江县| 凉城县| 布尔津县| 拉萨市| 吉隆县| 长武县| 台北市| 兰溪市| 阳朔县| 紫金县| 石棉县| 江山市| 北票市| 绥阳县| 内乡县| 长治县| 鄂温| 岚皋县| 锡林郭勒盟| 通河县| 宜宾县| 民和| 怀远县| 东兰县| 盐源县|