当前位置:编程学习 > 网站相关 >>

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
其实还是horseb牛写的yajing2010霸气 http://www.horseb.org/yajing2010.html

例子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让套接字允许

补充:综合编程 , 安全编程 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,