Je travaille sur un partage de fichiers client-server
pour mettre à jour un dossier particulier. Lorsque le client se connecte au serveur en utilisant tcp-socket
et recevoir un zip-file
particulier puis décompressez-le. J'ai accompli cela jusqu'à présent mais je veux comparer les fichiers dans les deux dossiers (client et serveur) pour vérifier la différence dans le contenu des fichiers (ie: fichiers mis à jour) et ne télécharger les fichiers que si le contenu est différent.Comparaison de fichiers entre le client et le serveur à l'aide du socket tcp
Mon code:
Client:
import socket
import zipfile
import os
def main():
host = '192.168.1.8'
port = 5000
s = socket.socket()
s.connect((host, port))
with open('C:\\file.zip', 'wb') as f:
while True:
data = s.recv(1024)
if not data:
break
f.write(data)
zip_ref = zipfile.ZipFile('C:\\file.zip', 'r')
zip_ref.extractall('C:\\')
zip_ref.close()
os.remove('C:\\file.zip')
s.close()
if __name__ == '__main__':
main()
Serveur:
import socket
from threading import Thread
def send_file(conn, filename):
with open(filename, 'rb') as f:
print 'Sending file'
data = f.read(1024)
while data:
conn.send(data)
data = f.read(1024)
print 'Finished sending'
conn.close()
def main():
host = '192.168.1.8'
port = 5000
s = socket.socket()
s.bind((host, port))
s.listen(5)
while True:
c, addr = s.accept()
t = Thread(target=send_file, args=(c, 'C:\\file.zip'))
t.start()
if __name__ == '__main__':
main()
Ce que j'ai essayé jusqu'à présent:
J'ai essayé filecmp.dircmp
mais Il vérifie seulement pour les différents fichiers et le contenu différent des fichiers et aussi je ne pouvais pas comparer le dossier du client avec le dossier du serveur. J'ai également essayé de loop
par l'intermédiaire des dossiers et employez filecmp
sur chaque dossier mais je ne pourrais pas également le comparer avec le même dossier du serveur.
Existe-t-il un moyen efficace de le faire?
Merci! Après quelques tests, j'ai finalement réussi à utiliser 'os.path.getmtime (filename)' comme vous l'avez suggéré. Ma seule préoccupation est que j'envoie actuellement le 'modified-date' du serveur au client et que je le reçois sous le nom' socket.recv (1024) ', cela conviendra-t-il à tous les scénarios? recevoir (1024)? –
'getmtime' retourne un float, comme pour cette autre réponse, un float en python est 64 bits: https://stackoverflow.com/questions/8216088/how-to-check-the-size-of-a-float- in-python mais ceci est un horodatage, donc les valeurs raisonnables que vous obtiendrez seront beaucoup plus petites que cela. –