`io.Copy` 的 Python 等效方法是什么?

3
我正在尝试用Python实现一个TCP代理,因此我需要直接连接两个套接字,将输入和输出传递其中。
在Golang中,我只需使用io.Copy即可完成,那么Python 2.6中的等效方法是什么?
go func() {
    defer conn1.Close()
    defer conn2.Close()
    io.Copy(conn1, conn2)
}()

使用shutil.copyfileobjsocket.socket.makefile - Nizam Mohamed
@NizamMohamed,你能提供一个例子吗? - daisy
@NizamMohamed 对我不起作用,shutil.copyfileobj(sock1.makefile(), sock2.makefile()) - daisy
请说明什么是“TCP代理”,以及它在哪里适用。在TCP中,一端启动连接(客户端),另一端接收连接(服务器)。您所说的是哪一端? - Nizam Mohamed
1个回答

2
您可以像这样使用函数:
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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接