📅  最后修改于: 2023-12-03 15:28:40.291000             🧑  作者: Mango
GATE IT 2006是一个计算机科学领域的国际性考试。问题10涉及到程序员需要实现一个基于TCP和UDP的简单文件传输协议,使客户端和服务器能够通过此协议传输文件。
在实现此协议时,需要考虑以下要求:
在实现文件传输协议时,可以遵循以下流程:
以下是一个较简单的实现示例。
# 客户端
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((host, port))
filename = 'file.pdf'
filesize = os.path.getsize(filename)
sock.sendall(f"{filename}:{filesize}".encode())
with open(filename, "rb") as f:
chunk = f.read(1024)
while chunk:
sock.sendall(chunk)
chunk = f.read(1024)
sock.close()
# 服务器
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind((host, port))
sock.listen(1)
print(f"Listening on {host}:{port}")
while True:
conn, addr = sock.accept()
print(f"Connection from {addr}")
chunk = conn.recv(1024)
filename, filesize = chunk.decode().split(":")
filename = os.path.basename(filename)
with open(filename, "wb") as f:
while True:
data = conn.recv(1024)
if not data:
break
f.write(data)
conn.close()
print(f"Received {filename}")
以上示例仅供参考,实际实现应该考虑更多的细节。