| 
 | 
 
使用Socket传输大文件(如5GB的mp4文件)时,需要考虑数据的分段传输、接收确认以及异常处理等因素。以下是一个简单的例子,展示了如何使用Python的Socket库来传输大文件。 
服务端代码: 
- import socket
 
 - import os
 
  
- def receive_file(host='127.0.0.1', port=65432, filename='received_file.mp4'):
 
 -     # 创建socket对象
 
 -     with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
 
 -         s.bind((host, port))
 
 -         s.listen()
 
 -         print(f"Waiting for a connection on {host}:{port}...")
 
 -         
 
 -         # 接受连接
 
 -         conn, addr = s.accept()
 
 -         with conn:
 
 -             print(f"Connected by {addr}")
 
 -             
 
 -             # 接收文件大小
 
 -             file_size = int(conn.recv(1024).decode('utf-8').strip())
 
 -             print(f"File size: {file_size} bytes")
 
 -             
 
 -             # 接收文件内容
 
 -             with open(filename, 'wb') as f:
 
 -                 while file_size:
 
 -                     chunk = conn.recv(4096)
 
 -                     if not chunk:
 
 -                         break
 
 -                     f.write(chunk)
 
 -                     file_size -= len(chunk)
 
 -             print(f"File {filename} received successfully.")
 
  
- if __name__ == "__main__":
 
 -     receive_file()
 
  复制代码 
 
客户端代码: 
- import socket
 
  
- def send_file(host='127.0.0.1', port=65432, filepath='large_file.mp4'):
 
 -     # 创建socket对象
 
 -     with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
 
 -         s.connect((host, port))
 
 -         
 
 -         # 发送文件大小
 
 -         file_size = os.path.getsize(filepath)
 
 -         s.sendall(f"{file_size}".encode('utf-8'))
 
 -         
 
 -         # 发送文件内容
 
 -         with open(filepath, 'rb') as f:
 
 -             while file_size:
 
 -                 chunk = f.read(4096)
 
 -                 s.sendall(chunk)
 
 -                 file_size -= len(chunk)
 
 -         print(f"File {filepath} sent successfully.")
 
  
- if __name__ == "__main__":
 
 -     send_file()
 
  复制代码 
 
使用说明 
服务器端:运行服务器端代码,它会在指定的端口(如65432)上监听连接请求。 
 
客户端:运行客户端代码,并指定要发送的文件路径(如large_file.mp4)。客户端会连接到服务器,发送文件大小,然后逐块发送文件内容。 
 
接收文件:服务器端接收到文件后,会将其保存到本地(默认为received_file.mp4)。 
 
注意事项 
异常处理:在实际应用中,应添加异常处理逻辑以处理网络中断、文件读取错误等情况。 
 
性能优化:对于大文件传输,可以考虑使用多线程或异步IO来提高传输效率。 
 
安全性:本示例未考虑数据安全性,如加密传输、身份验证等。在实际应用中,应根据需求添加相应的安全措施。 
 
通过这个简单的例子,您可以了解如何使用Python的Socket库来传输大文件。在实际应用中,可能需要根据具体需求进行进一步的改进和优化。 
 |   
 
 
 
 |