无法使用Python套接字编程在计算机之间发送文件

时间:2013-03-23 16:50:12

标签: python sockets file-io

我用Python编写了一个套接字编程代码。它应该能够在不同的计算机之间发送文件。我在同一台计算机上测试了我的代码(即通过从2个不同的文件夹发送文件)并且它可以工作。但是,当我尝试通过将文件从我的计算机发送到朋友的计算机来测试代码时,我不断收到此错误:

 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地址的方式有关吗?如果是这样,当我尝试将文件从1个文件夹发送到同一台计算机中的另一个文件夹时,它是如何工作的?我有什么想法可以解决这个问题吗?

修改

代码崩溃,它碰到下面的代码:

        def listOfFiles(directory): 
                list_dir = os.listdir(directory) 
                return list_dir

2 个答案:

答案 0 :(得分:0)

您可能会发现通过os.path模块更容易处理python中的路径。例如,如果要访问用户主目录中的文件:

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( .... )

答案 1 :(得分:0)

问题

破解的代码是:

list_dir = os.listdir(directory) 

这意味着directory指向的目录在本地计算机中不存在。

在您的代码中,您有

client_files = listOfFiles(client_side)
server_files = listOfFiles(server_side)

哪个不起作用。

您无法使用os.listdir来获取远程计算机(朋友的计算机)上的文件夹列表,而无需使用\\hostname\\path之类的内容。

当您在同一台计算机上运行服务器和客户端时,它既可以作为本地计算机的两个点。

<强>解决方案

方法1:停止尝试获取远程计算机的列表,让该计算机上运行的代码为您完成。

方法2:使用远程访问URL(共享文件夹或其他内容)访问远程计算机的详细信息。