I wrote a python app which transfers files via sockets to a server. It always works, but my question is: is that a good way to transfer files from desktop client to server via sockets? How, for example, do Google Drive or Dropbox desktop clients syncronize files (as I know for already existent files GD client sends only changes, like rsync), but what about new files?
You may consider packaging the file into a torrent, and transferring it that way. Torrents have LOTS of error recovery. Many large companies, for example, Blizzard, use torrents to deliver content to their users.
You'll still need a way to transfer the torrent info of course
See python package libtorrent and the server software called opentracker
I've also done file transfer with sockets, which is fine if the internet connection is uninterrupted, and you don't want to parallel stream.
Python file transfer