我刚刚开始使用Python学习网络编程。当前正在处理作业,该作业请求使用UDP将文件从客户端发送到服务器,然后再发送回客户端。但是,我的代码可以在较小的文件上正常工作,但是在较大的文件上却有问题。
我找到了一种使用import os找出文件大小的方法。因此,我正在考虑将文件拆分成大于UDP可以发送的最大大小的文件,并一一发送。
但是我不确定UDP可以发送的最大大小,并且在发送时如何将所有拆分部分重新组合在一起?
// Client side
import os
from socket import *
//Set up information of server
server_name = '127.0.0.1' # 127.0.0.1 is local IP
server_port = 12000
clientSocket = socket(AF_INET, SOCK_DGRAM)
//Request the location of file
foundFile = 0
while foundFile == 0:
print("========================================")
print("[Please input the path of the file you wish to transmit.]")
path = input("[Path]: ")
print("========================================")
if os.path.isfile(path):
print("[File found.]")
fileSize = os.path.getsize(path)
print("[File size is : ", fileSize, 'bits]')
print("[Starting file transmission.]")
foundFile = 1
else:
print("[File not found.] Please re-enter the correct path.")
print("[Please choose only on file, or enter the correct path.]")
foundFile = 0
fileOpen = open(path, 'rb')
file = fileOpen.read()
clientSocket.sendto(file, (server_name, server_port))
因此,如果文件很小,则应将其发送到服务器端。稍后在代码中,服务器端将把相同的内容发回并在桌面上创建副本。
但是,如果文件太大,则会出现错误: clientSocket.sendto(文件,(服务器名称,服务器端口)) OSError:[WinError 10040]