Sending a file over TCP sockets in Python Sending a file over TCP sockets in Python python python

Sending a file over TCP sockets in Python


Client need to notify that it finished sending, using socket.shutdown (not socket.close which close both reading/writing part of the socket):

...print "Done Sending"s.shutdown(socket.SHUT_WR)print s.recv(1024)s.close()

UPDATE

Client sends Hello server! to the server; which is written to the file in the server side.

s.send("Hello server!")

Remove above line to avoid it.


Remove below code

s.send("Hello server!")

because your sending s.send("Hello server!") to server, so your output file is somewhat more in size.


You can send some flag to stop while loop in server

for example

Server side:

import sockets = socket.socket()s.bind(("localhost", 5000))s.listen(1)c,a = s.accept()filetodown = open("img.png", "wb")while True:   print("Receiving....")   data = c.recv(1024)   if data == b"DONE":           print("Done Receiving.")           break   filetodown.write(data)filetodown.close()c.send("Thank you for connecting.")c.shutdown(2)c.close()s.close()#Done :)

Client side:

import sockets = socket.socket()s.connect(("localhost", 5000))filetosend = open("img.png", "rb")data = filetosend.read(1024)while data:    print("Sending...")    s.send(data)    data = filetosend.read(1024)filetosend.close()s.send(b"DONE")print("Done Sending.")print(s.recv(1024))s.shutdown(2)s.close()#Done :)