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

首頁 > 編程 > Python > 正文

嘗試用最短的Python代碼來實現服務器和代理服務器

2019-11-25 16:42:10
字體:
來源:轉載
供稿:網友

一個最簡單的服務器
Python擁有這種單獨起一個服務器監聽端口的能力,用標準庫的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行代碼實現代理服務器
之前遇到一個場景是這樣的:
我在自己的電腦上需要用mongodb圖形客戶端,但是mongodb的服務器地址沒有對外網開放,只能通過先登錄主機A,然后再從A連接mongodb服務器B。
本來想通過ssh端口轉發的,但是我沒有從機器A連接ssh到B的權限。于是就自己用Python寫一個。
原理很簡單。
1.開一個socket server監聽連接請求
2.每接受一個客戶端的連接請求,就往要轉發的地址建一條連接請求。即client->proxy->forward。proxy既是socket服務端(監聽client),也是socket客戶端(往forward請求)。
3.把client->proxy和proxy->forward這2條socket用字典給綁定起來。
4.通過這個映射的字典把send/recv到的數據原封不動的傳遞
下面上代碼。

#coding=utf-8 import socket import select import sys  to_addr = ('xxx.xxx.xx.xxx', 10000)#轉發的地址  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()#代理服務器監聽的地址   except KeyboardInterrupt:     sys.exit(1) 

效果截圖如下。

2016623145635171.jpg (574×128)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 台东县| 南溪县| 天镇县| 永兴县| 万州区| 兴义市| 颍上县| 花垣县| 公安县| 丹东市| 宜州市| 六枝特区| 桃江县| 搜索| 唐河县| 金乡县| 高邑县| 常山县| 德令哈市| 化隆| 库伦旗| 中牟县| 鄂伦春自治旗| 梁山县| 定州市| 隆尧县| 营山县| 永城市| 怀柔区| 兴海县| 陆丰市| 上林县| 芜湖市| 绥芬河市| 青冈县| 虎林市| 丰城市| 蓬溪县| 明水县| 宁武县| 新野县|