2016-04-07 6 views
-1

Ich habe diesen Python-Code, der nur funktioniert, wenn TCP_IP localhost ist. Wenn ich es zu einer anderen Server-IP für z.B. 23.21.167.61 dann kann die Datei nicht gesendet werden, auch wenn der andere Server abhört.Bindung statt Verbindung zu IP

import socket 
from threading import Thread 
from SocketServer import ThreadingMixIn 

TCP_IP = 'localhost' 
TCP_PORT = 9001 
BUFFER_SIZE = 1024 

class ClientThread(Thread): 

    def __init__(self,ip,port,sock): 
     Thread.__init__(self) 
     self.ip = ip 
     self.port = port 
     self.sock = sock 
     print " New thread started for "+ip+":"+str(port) 

    def run(self): 
     filename='mytext.txt' 
     f = open(filename,'rb') 
     while True: 
      l = f.read(BUFFER_SIZE) 
      while (l): 
       self.sock.send(l) 
       #print('Sent ',repr(l)) 
       l = f.read(BUFFER_SIZE) 
      if not l: 
       f.close() 
       self.sock.close() 
       break 

tcpsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
tcpsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
tcpsock.bind((TCP_IP, TCP_PORT)) 
threads = [] 

while True: 
    tcpsock.listen(5) 
    print "Waiting for incoming connections..." 
    (conn, (ip,port)) = tcpsock.accept() 
    print 'Got connection from ', (ip,port) 
    newthread = ClientThread(ip,port,conn) 
    newthread.start() 
    threads.append(newthread) 

for t in threads: 
    t.join() 

Ich bekomme einen Fehler beim Binden an IP. Ich kann Methode verbinden, aber dann werde ich nicht in der Lage sein, die Vorteile von Einfädeln zu nehmen, wie hier ... http://www.bogotobogo.com/python/python_network_programming_server_client_file_transfer.php

[[email protected] ec2-user]# python server2.py 
Traceback (most recent call last): 
    File "server2.py", line 34, in <module> 
    tcpsock.bind((TCP_IP, TCP_PORT)) 
    File "/usr/lib64/python2.7/socket.py", line 228, in meth 
    return getattr(self._sock,name)(*args) 
socket.error: [Errno 99] Cannot assign requested address 
+2

Es sieht so aus, als ob Sie Ihre Seite eines Sockets an eine externe Adresse binden. Das wird nicht funktionieren. Kannst du klarstellen, was du hier erreichen willst? –

+0

Ich muss Dateien von vielen Servern auf den zentralen Server kopieren. Ich denke, dies kann mit Threading erreicht werden, wie im Tutorial gezeigt. – shantanuo

Antwort

0
erklärt

Das funktionierte, wenn ich wie eine leere Zeichenfolge verwendet ‚‘ anstelle von localhost

TCP_IP = '' 

Dann vom Client ich verbunden und erhielt Datei vom Remote-Server 23.21.167.61 Ich bin mir nicht sicher, was bedeutet leere Zeichenfolge. Aber es hat das Problem gelöst.

Verwandte Themen