2017-01-08 1 views
1

Ich versuche, einen TCP-Proxy mit Python zu implementieren,Python Äquivalent von `io.Copy`

Also muss ich zwei Buchsen direkt verbinden, vorbei an Eingang und Ausgang dazwischen.

In golang, habe ich einfach ein io.Copy tun, was ist das Äquivalent in Python 2.6?

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

'shutil.copyfileobj' mit' socket.socket.makefile'. –

+0

@NizamMohamed können Sie ein Beispiel geben? – daisy

+0

@NizamMohamed nicht für mich arbeiten, 'shutil.copyfileobj (sock1.makefile(), sock2.makefile())' – daisy

Antwort

1

können Sie Funktion wie folgt verwendet werden:

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 

Dann sie in separate Threads starten:

# 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()