0

Python でソケット プログラミング コードを作成しました。異なるコンピューター間でファイルを送信できるはずです。同じコンピューターで (つまり、2 つの異なるフォルダーからファイルを送信して) コードをテストしたところ、動作しました。ただし、自分のコンピューターから友人のコンピューターにファイルを送信してコードをテストしようとすると、次のエラーが発生し続けます。

 WindowsError: [Error 3] The system cannot find the path specified: 'C://Users//Admin//Desktop//SharedFiles/*.*' 

client_side_folder以下に示すように、Python プログラムが変数にアクセスしようとすると、エラーが発生します。

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
4

2 に答える 2

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( .... )
于 2013-03-23T17:03:32.863 に答える
0

問題

壊れているコードは次のとおりです。

list_dir = os.listdir(directory) 

これは、 が指すディレクトリがdirectoryローカル マシンに存在しないことを意味します。

あなたのコードでは、

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

これは機能しません。

os.listdirのようなものを使用せずに、リモート マシン (友人のマシン) 上のフォルダーの一覧を取得するために使用することはできません\\hostname\\path

サーバーとクライアントを同じマシンで実行している場合、両方がローカル マシンを指すように機能します。

解決

方法 1: リモート マシンのリストを取得しようとするのをやめて、そのマシンで実行されているコードに任せます。

方法 2: リモート アクセス URL (共有フォルダーなど) を使用して、リモート マシンの詳細にアクセスします。

于 2013-03-23T18:44:29.763 に答える