Sono riuscito a copiare il contenuto del file (immagine) in un nuovo file. Tuttavia quando provo la stessa cosa su socket TCP sto affrontando problemi. Il loop del server non si sta esaurendo. Il loop client termina quando raggiunge EOF, tuttavia il server non è in grado di riconoscere EOF.Invio di un file tramite socket TCP in Python
Ecco il codice:
Server
import socket # Import socket module
s = socket.socket() # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345 # Reserve a port for your service.
s.bind((host, port)) # Bind to the port
f = open('torecv.png','wb')
s.listen(5) # Now wait for client connection.
while True:
c, addr = s.accept() # Establish connection with client.
print 'Got connection from', addr
print "Receiving..."
l = c.recv(1024)
while (l):
print "Receiving..."
f.write(l)
l = c.recv(1024)
f.close()
print "Done Receiving"
c.send('Thank you for connecting')
c.close() # Close the connection
client
import socket # Import socket module
s = socket.socket() # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345 # Reserve a port for your service.
s.connect((host, port))
s.send("Hello server!")
f = open('tosend.png','rb')
print 'Sending...'
l = f.read(1024)
while (l):
print 'Sending...'
s.send(l)
l = f.read(1024)
f.close()
print "Done Sending"
print s.recv(1024)
s.close # Close the socket when done
Ecco lo screenshot:
Server
client
Edit 1: dati aggiuntivi copiato. Rendere il file "non completo". La prima colonna mostra l'immagine che è stata ricevuta. Sembra essere più grande di quello inviato. Per questo motivo, non sono in grado di aprire l'immagine. Sembra un file danneggiato.
Edit 2: Questo è come lo faccio nella console. Le dimensioni dei file sono le stesse qui.
Grazie per avermi aiutato! Ho provato questo, ma è ancora in loop. Il problema che penso sia che il client invia non è mai l'invio di EOF, perché una volta raggiunto EOF, sta uscendo dal ciclo e non lo invia mai al server. È questo l'errore? –
@SwaathiK, Ah, il client è in attesa dei dati, al termine dell'invio. Ho aggiornato la risposta. Per favore controlla. – falsetru
Grazie mille! Ha funzionato come un fascino. Ma ho solo un'altra domanda, perché il file non viene ricostruito dal lato server? Copia tutto, ma il file non è completo. Spero di avere un senso. –