ftp server 傳送檔案

2021-08-21 02:59:50 字數 2840 閱讀 5284

操作步驟:

1、讀取檔名

2、檔案是否存在

3、開啟檔案

4、讀取檔案大小

5、準備傳送檔案到客戶端

6、等客戶端確認,防止發生粘包

7、傳送資料

8、md5校驗

客戶端

import socket

import hashlib

client = socket.socket()

client.connect(("localhost", 9999))

while true:

cmd = input(">>:").strip()

if len(cmd) == 0: continue

if cmd.startswith("get"):

client.send(cmd.encode("utf-8")) # 傳送1

data_size = client.recv(1024) # 接收2 檔案大小

print("接收的檔案大小為:", data_size)

client.send("準備好了".encode("utf-8")) # 傳送3 傳送確認

filename = cmd.split()[1]

recived_size = 0

m = hashlib.md5()

with open(filename + ".new", "wb") as f:

while recived_size < int(data_size.decode()):

if int(data_size.decode()) - recived_size > 1024:#防止粘包

size = 1024

else:

size = int(data_size.decode()) - recived_size

print(size)

recived_data = client.recv(size) # 接收4 接收檔案

f.write(recived_data)

m.update(recived_data)

recived_data_size = len(recived_data)

recived_size += recived_data_size

else:

server_md5 = client.recv(1024)

print("來自伺服器檔案的md5", server_md5.decode())

client_md5 = m.hexdigest()

print("接受後的檔案的md5", client_md5)

print("接收完畢")

print("接收到檔案資料大小:", recived_size, "/", int(data_size.decode()))

client.close()

服務端

import os, socket

import hashlib

server = socket.socket()

server.bind(("localhost", 9999))

server.listen()

print("正在監聽")

while true:

conn, address = server.accept()

print("新的會話", address)

while true:

print("等待新指令")

data = conn.recv(1024) # 接收1

if not data:

print("客戶端已斷開")

break

cmd, filename = data.decode().split()

if os.path.isfile(filename):

with open(filename, "rb") as f:

file_data_size = os.stat(filename).st_size

print("傳送的檔案大小為:", file_data_size)

conn.send(str(file_data_size).encode("utf-8")) # 傳送2 檔案大小

client_ack = conn.recv(1024) # 接收3 接收確認

m = hashlib.md5()

for line in f:

conn.send(line) # 傳送4 檔案內容

m.update(line)

conn.send(m.hexdigest().encode("utf-8"))

print("md5值為:",m.hexdigest())

print("傳送完畢")

server.close()

客戶端如圖所示

接收的檔案大小為: b'26659288'

764來自伺服器檔案的md5 c9ccdae767ebccd4b3f86ff3506c16ba

接受後的檔案的md5 c9ccdae767ebccd4b3f86ff3506c16ba

接收完畢

接收到檔案資料大小: 26659288 / 26659288

服務端正在監聽

新的會話 ('127.0.0.1', 56787)

等待新指令

傳送的檔案大小為: 26659288

md5值為: c9ccdae767ebccd4b3f86ff3506c16ba

傳送完畢

等待新指令

檔案服務 FTP Server

ftp server 簡介名詞解釋 ftp file transfer protocol,檔案傳輸協議 是 tcp ip 協議組中的協議之一 logo 作用提供檔案共享服務 網際網路上多的 資源和軟體資源。絕大部分都是通過ftp伺服器傳遞。軟體包 vsftpd 基礎 控制埠 command 21 t...

檔案共享服務 FTP Server

setenforce 0 這個是暫時關閉,下面那個是永久關閉 vim etc selinux config selinux disabled 這個是永久關閉selinux 1.安裝客戶端工具 root qianfeng yum y install lftp 訪問伺服器 root qianfeng l...

安裝FTPSERVER的過程

1.安裝vsftpd元件,安裝完後,有 etc vsftpd vsftpd.conf 檔案,用來配置,還有新建了乙個ftp使用者和ftp的組,指向home目錄為 var ftp,預設是nologin 不能登入系統 yum y install vsftpd 可以用下面命令檢視使用者 cat etc p...