0
我正在致力于client-server
文件共享以更新特定文件夹。客户端使用tcp-socket
连接到服务器并接收特定zip-file
然后解压缩。到目前为止,我已经完成了这一工作,但我想比较两个文件夹(客户端和服务器)中的文件以检查文件内容(即:更新文件)的差异,并且只在内容不同时才下载文件。使用tcp套接字比较客户端和服务器之间的文件
我的代码:
客户:
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()
服务器:
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()
我迄今为止尝试:
我试过filecmp.dircmp
但它只检查不同的文件,而不是不同的文件内容,我也无法比较客户端和服务器的文件夹。我还试图通过文件loop
并在每个文件上使用filecmp
,但我也无法将它与来自服务器的同一文件进行比较。
有没有一种有效的方法来做到这一点?
谢谢!经过一些测试后,我终于按照你的建议使用'os.path.getmtime(filename)'来工作。我唯一担心的是,我现在正在将'modified-date'从服务器发送到客户端,并将其作为'socket.recv(1024)'接收,这对所有情况都适用吗?接收(1024)? –
'getmtime'返回一个浮点数,根据这个其他答案,python中的浮点数为64位:https://stackoverflow.com/questions/8216088/how-to-check-the-size-of-a-float- in-python,但这是一个时间戳,因此您将获得的合理值将远远小于此值。 –