【问题标题】:Python equivalent of `io.Copy``io.Copy` 的 Python 等价物
【发布时间】:2017-01-08 06:53:38
【问题描述】:

我正在尝试用 python 实现一个 tcp 代理,

所以我需要直接连接两个socket,在两者之间传递输入和输出。

在 golang 中,我只是简单地做了一个io.Copy,在 Python 2.6 中相当于什么?

go func() {
    defer conn1.Close()
    defer conn2.Close()
    io.Copy(conn1, conn2)
}()

【问题讨论】:

  • shutil.copyfileobjsocket.socket.makefile
  • @NizamMohamed 你能举个例子吗?
  • @NizamMohamed 对我不起作用,shutil.copyfileobj(sock1.makefile(), sock2.makefile())
  • 澄清什么是“tcp 代理”以及它适合的位置。在 TCP 中,一端启动连接(客户端),另一端接收(服务器)。你说的是哪一端?

标签: python sockets go proxy


【解决方案1】:

你可以使用这样的函数:

def CopyProxy(conn1, conn2):    
    while True:        
        data = conn2.recv(BUFFER_SIZE)        
        try:            
            conn1.send(data)            
            if not data:                
              conn1.close()              
              conn2.close()                
              break        
        except Exception:            
              break

然后在单独的线程中启动它们:

# conn1 and conn2 - previously opened connections "to" and "from"
t1 = threading.Thread(target=CopyProxy, args=[conn1, conn2])
t2 = threading.Thread(target=CopyProxy, args=[conn2, conn1])   
t1.start() 
t2.start()

【讨论】:

    猜你喜欢
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 2018-09-06
    • 2013-02-06
    • 2012-03-22
    • 2016-12-27
    相关资源
    最近更新 更多