【发布时间】:2017-11-28 19:00:48
【问题描述】:
我在编写程序以使用 Python 通过网络发送文件夹内容时遇到问题。那里有很多例子,我发现的所有例子都是假设接收方知道他想要接收的文件的名称。我正在尝试执行的程序假设接收方同意接收文件并且不需要从服务器请求文件的名称。一旦服务器和客户端之间建立连接,服务器就会开始将特定文件夹中的所有文件发送到客户端。这是一张图片来显示更多解释:example here
以下是一些执行客户端服务器的程序,但它们发送一个文件并假设接收方知道文件名,因此客户端应该按文件名请求文件才能接收它。 注意:对于英语语法错误,我深表歉意。
https://www.youtube.com/watch?v=LJTaPaFGmM4
http://www.bogotobogo.com/python/python_network_programming_server_client_file_transfer.php
这是我找到的最好的例子:
服务器端:
import sys
import socket
import os
workingdir = "/home/SomeFilesFolder"
host = ''
skServer = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
skServer.bind((host, 1000))
skServer.listen(10)
print "Server Active"
bFileFound = 0
while True:
Content, Address = skServer.accept()
print Address
sFileName = Content.recv(1024)
for file in os.listdir(workingdir):
if file == sFileName:
bFileFound = 1
break
if bFileFound == 0:
print sFileName + " Not Found On Server"
else:
print sFileName + " File Found"
fUploadFile = open("files/" + sFileName, "rb")
sRead = fUploadFile.read(1024)
while sRead:
Content.send(sRead)
sRead = fUploadFile.read(1024)
print "Sending Completed"
break
Content.close()
skServer.close()
客户端:
import sys
import socket
skClient = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
skClient.connect(("ip address", 1000))
sFileName = raw_input("Enter Filename to download from server : ")
sData = "Temp"
while True:
skClient.send(sFileName)
sData = skClient.recv(1024)
fDownloadFile = open(sFileName, "wb")
while sData:
fDownloadFile.write(sData)
sData = skClient.recv(1024)
print "Download Completed"
break
skClient.close()
如果有办法从客户端消除此语句:
sFileName = raw_input("Enter Filename to download from server : ")
并使服务器端将所有文件一一发送,而无需等待客户端选择文件。
【问题讨论】:
-
你能 UDP 文件名吗?
-
请多解释,不明白你的意思
-
将包含文件名的 UDP 数据报发送给客户端,然后客户端使用您在网上找到的任何代码请求这些文件。
-
谢谢你的解释,我会列出代码,所以请建议更改添加发送文件名的能力。
标签: python sockets networking file-transfer