最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

嘗試用最短的Python代碼來實(shí)現(xiàn)服務(wù)器和代理服務(wù)器

 更新時(shí)間:2016年06月23日 14:57:47   作者:mattkang  
"人生苦短、我用Python",Python最大的特點(diǎn)便是代碼簡潔,得益于Python自帶的wsgiref包和socket模塊,這里我們將嘗試用最短的Python代碼來實(shí)現(xiàn)服務(wù)器和代理服務(wù)器:

一個(gè)最簡單的服務(wù)器
Python擁有這種單獨(dú)起一個(gè)服務(wù)器監(jiān)聽端口的能力,用標(biāo)準(zhǔn)庫的wsgiref就行。

from wsgiref.simple_server import make_server 
def simple_app(environ, start_response): 
  status = '200 OK' 
  response_headers = [('Content-type','text/plain')] 
  start_response(status, response_headers) 
  return ['Hello world!\n'] 
httpd = make_server('', 80, simple_app) 
httpd.serve_forever() 

2016623145600293.jpg (247×67)

50行代碼實(shí)現(xiàn)代理服務(wù)器
之前遇到一個(gè)場景是這樣的:
我在自己的電腦上需要用mongodb圖形客戶端,但是mongodb的服務(wù)器地址沒有對外網(wǎng)開放,只能通過先登錄主機(jī)A,然后再從A連接mongodb服務(wù)器B。
本來想通過ssh端口轉(zhuǎn)發(fā)的,但是我沒有從機(jī)器A連接ssh到B的權(quán)限。于是就自己用Python寫一個(gè)。
原理很簡單。
1.開一個(gè)socket server監(jiān)聽連接請求
2.每接受一個(gè)客戶端的連接請求,就往要轉(zhuǎn)發(fā)的地址建一條連接請求。即client->proxy->forward。proxy既是socket服務(wù)端(監(jiān)聽client),也是socket客戶端(往forward請求)。
3.把client->proxy和proxy->forward這2條socket用字典給綁定起來。
4.通過這個(gè)映射的字典把send/recv到的數(shù)據(jù)原封不動的傳遞
下面上代碼。

#coding=utf-8 
import socket 
import select 
import sys 
 
to_addr = ('xxx.xxx.xx.xxx', 10000)#轉(zhuǎn)發(fā)的地址 
 
class Proxy: 
  def __init__(self, addr): 
    self.proxy = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
    self.proxy.bind(addr) 
    self.proxy.listen(10) 
    self.inputs = [self.proxy] 
    self.route = {} 
 
  def serve_forever(self): 
    print 'proxy listen...' 
    while 1: 
      readable, _, _ = select.select(self.inputs, [], []) 
      for self.sock in readable: 
        if self.sock == self.proxy: 
          self.on_join() 
        else: 
          data = self.sock.recv(8096) 
          if not data: 
            self.on_quit() 
          else: 
            self.route[self.sock].send(data) 
 
  def on_join(self): 
    client, addr = self.proxy.accept() 
    print addr,'connect' 
    forward = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    forward.connect(to_addr) 
    self.inputs += [client, forward] 
    self.route[client] = forward 
    self.route[forward] = client 
 
  def on_quit(self): 
    for s in self.sock, self.route[self.sock]: 
      self.inputs.remove(s) 
      del self.route[s] 
      s.close() 
 
if __name__ == '__main__': 
  try: 
    Proxy(('',12345)).serve_forever()#代理服務(wù)器監(jiān)聽的地址 
  except KeyboardInterrupt: 
    sys.exit(1) 

效果截圖如下。

2016623145635171.jpg (574×128)

相關(guān)文章

  • PyQt5中QSpinBox計(jì)數(shù)器的實(shí)現(xiàn)

    PyQt5中QSpinBox計(jì)數(shù)器的實(shí)現(xiàn)

    這篇文章主要介紹了PyQt5中QSpinBox計(jì)數(shù)器的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • python用selenium打開瀏覽器后秒關(guān)閉瀏覽器的解決辦法

    python用selenium打開瀏覽器后秒關(guān)閉瀏覽器的解決辦法

    最近朋友在學(xué)Selenium的時(shí)候遇到一個(gè)問題,當(dāng)執(zhí)行完selenium程序后,瀏覽器會閃退也就是自動關(guān)閉,這篇文章主要給大家介紹了關(guān)于python用selenium打開瀏覽器后秒關(guān)閉瀏覽器的解決辦法,需要的朋友可以參考下
    2023-07-07
  • PyQt5中向單元格添加控件的方法示例

    PyQt5中向單元格添加控件的方法示例

    這篇文章主要介紹了PyQt5中向單元格添加控件的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • pyhthon繪制超炫酷的心形線星形線擺線

    pyhthon繪制超炫酷的心形線星形線擺線

    這篇文章主要為大家介紹了如何用pyhthon繪制各種超炫酷的擺線,本文主要實(shí)現(xiàn)了心形線和星形線也就是外擺線和內(nèi)擺線兩種,有需要的朋友可以借鑒參考下
    2021-10-10
  • Python中的bytes類型用法及實(shí)例分享

    Python中的bytes類型用法及實(shí)例分享

    這篇文章主要介紹了Python中的bytes類型及其用法,Python?bytes?類型用來表示一個(gè)字節(jié)串,bytes?只負(fù)責(zé)以字節(jié)序列的形式來存儲數(shù)據(jù),下面對其的相關(guān)內(nèi)容介紹,需要的小伙伴可以參考一下
    2022-03-03
  • python元組操作實(shí)例解析

    python元組操作實(shí)例解析

    這篇文章主要介紹了python元組操作,以實(shí)例的形式較為直觀的講述了Python中元組的特點(diǎn)與用法,需要的朋友可以參考下
    2014-09-09
  • Python使用scrapy抓取網(wǎng)站sitemap信息的方法

    Python使用scrapy抓取網(wǎng)站sitemap信息的方法

    這篇文章主要介紹了Python使用scrapy抓取網(wǎng)站sitemap信息的方法,涉及Python框架scrapy的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • Python 命令行參數(shù)sys.argv

    Python 命令行參數(shù)sys.argv

    命令行參數(shù)是通過sys.argv[]來獲取的,sys.argv[0]是代碼文件本身的路徑,因此參數(shù)是從1開始的。比如設(shè)置參數(shù)為: spe
    2008-09-09
  • django settings.py 配置文件及介紹

    django settings.py 配置文件及介紹

    Django的settings文件包含Django應(yīng)用的所有配置項(xiàng)。接下來通過本文給大家介紹django settings.py 配置文件的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧
    2019-07-07
  • 如何從Python 程序中運(yùn)行 PowerShell 腳本

    如何從Python 程序中運(yùn)行 PowerShell 腳本

    Windows PowerShell 由數(shù)十個(gè)內(nèi)置 cmdlet 組成,它們提供了豐富的功能集,本文將重點(diǎn)討論從 Python 代碼執(zhí)行 PowerShell 邏輯,感興趣的朋友跟隨小編一起看看吧
    2023-10-10

最新評論

黄梅县| 三门县| 河北省| 文成县| 哈尔滨市| 黄大仙区| 七台河市| 瓦房店市| 攀枝花市| 阳泉市| 滦平县| 都昌县| 张家口市| 广昌县| 保康县| 合山市| 盱眙县| 菏泽市| 新巴尔虎左旗| 全州县| 广德县| 乳山市| 宜州市| 水城县| 宜州市| 怀柔区| 沂水县| 华阴市| 淮阳县| 西青区| 沁阳市| 炉霍县| 东丰县| 洪江市| 甘泉县| 铜梁县| 台州市| 新平| 定日县| 五原县| 伊宁市|