无法使用Python套接字编程在计算机之间发送文件
我写了一段用Python做的socket编程代码,目的是让不同的电脑之间可以发送文件。我在同一台电脑上测试了这段代码(也就是从两个不同的文件夹发送文件),结果是可以正常工作的。但是,当我尝试把文件从我的电脑发送到我朋友的电脑时,总是出现这个错误:
WindowsError: [Error 3] The system cannot find the path specified: 'C://Users//Admin//Desktop//SharedFiles/*.*'
这个错误发生在我的Python程序试图访问client_side_folder
变量的时候,具体如下:
client_side_folder = "C://Users//Admin//Desktop//SharedFiles"
我还尝试把client_side_folder
替换成"C:/Users/Admin/Desktop/SharedFiles"和"C:\Users\Admin\Desktop\SharedFiles",但结果还是出现同样的错误。
这个错误是不是跟Python处理Windows地址的方式有关?如果是的话,为什么在同一台电脑上从一个文件夹发送到另一个文件夹时就没有问题呢?有没有人能给我一些解决这个问题的建议?
编辑:
代码在执行到以下部分时崩溃:
def listOfFiles(directory):
list_dir = os.listdir(directory)
return list_dir
2 个回答
在Python中,处理文件路径时,使用os.path模块会更简单。例如,如果你想访问用户主目录中的一个文件,可以这样做:
from os.path import expanduser, join
userhome = expanduser( '~' )
desktop = join( userhome, 'Desktop' )
shared_dir = join( desktop, 'SharedFiles' )
file_list = os.listdir( shared_dir )
这也意味着,执行这个脚本的用户必须有权限访问你想要打开的路径。
补充说明 1:
假设你在使用TCP套接字,这里有一个客户端和服务器的示例代码:
服务器在你朋友的主机上运行:
import socket
serversocket = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
serversocket.bind( ( 'localhost', 13000 ) )
serversocket.listen(5) # 5 is the number of client connections that can be queued
while 1:
#accept connections from outside
(clientsocket, address) = serversocket.accept()
# processing of the incoming connection
....
客户端在你的主机上运行:
import socket
s = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
s.connect( ( 'friendshost', 13000 ) )
s.send( .... )
问题
出问题的代码是:
list_dir = os.listdir(directory)
这意味着你所指的 directory
目录在你的本地机器上并不存在。
在你的代码中,你有:
client_files = listOfFiles(client_side)
server_files = listOfFiles(server_side)
这段代码是行不通的。
你不能用 os.listdir
来获取远程机器(比如朋友的电脑)上文件夹的内容,除非你使用类似 \\hostname\\path
的方式。
当你在同一台机器上运行服务器和客户端时,这样做是有效的,因为它们都指向本地机器。
解决方案
方法一:别再试图获取远程机器的文件列表,让在那台机器上运行的代码来帮你完成这个任务。
方法二:使用远程访问的链接(比如共享文件夹之类的)来获取远程机器的详细信息。