您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python实现端口复用实例代码

5b51 2022/1/14 8:17:49 python 字数 5476 阅读 365 来源 www.jb51.cc/python

本文介绍Python实现端口复用实例如下所示: #coding=utf-8 importsocket importsys importselect

概述

本文介绍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,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,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,1)
 #接下来两个套接字都也可以绑定到同一个端口上
tcp1.bind(('0.0.0.0',12345))
tcp2.bind(('0.0.0.0',12345))
import socket
tcp1 = socket.socket(socket.AF_INET,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,address = sock1.accept() 
    buf = connection.recv(bufLen) 
    #print buf      
    sock2.send(buf) 
    connection.send(sock2.recv(bufLen))
    connection.close()

总结

以上是编程之家为你收集整理的Python实现端口复用实例代码全部内容,希望文章能够帮你解决Python实现端口复用实例代码所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶