私はクライアント/サーバーアプリケーションを持っており、非常に基本的です。クライアントは、サーバにファイル名を含む情報を含むメッセージを送信し、サーバは次にこのファイルをサーバディレクトリに作成し、クライアントが選択したファイルからすべてのバイナリデータをサーバ(およびサーバ新しく形成されたファイルに書き込む)。サーバーはこのファイルを実行し、すべての出力をクライアントに送り返す必要があります。私はこのデッドエンドを打ち、ループを維持するまでうまくいきました。ここでは、サーバー上のコードの簡易版です:このコードが実行されるたびPython - ソケットが奇妙に動作していますか?
if data_received.startswith("COMMAND:run_file"): #client tells server to create new file
#create file
while True:
#Get binary data from client
#If data is blank break
#Write data to new file
#Close file
#Open up new file using subprocess
p = Popen("python " + data[17:], shell=True,stdin=PIPE,stdout=PIPE,stderr=STDOUT)
print p.stdout.read() #Print output
は今、サーバはクライアントのファイル罰金のバイナリデータを受信しますが、それはただ待っている...そこに座っます何か、それはクライアントから新しいコマンドを待っていない(私はこれを多く知っている)。私は混乱しているので、誰かが私がどこかで作った(おそらく)非常に明白な間違いを見つけられますか?
編集:
それが立ち往生した場合、私が発見した、それは今私は、なぜこれが立ち往生され見当もつかない
print p.stdout.read()
後です。
クライアントからバイナリデータを取得するのにどのようなコマンドを使用しますか? – Maaaaa
クライアントはデータ 's.sendall(data)'を送り、サーバは 'conn.recv(1024)'を使ってデータを受け取ります –
'data_recieved'をトレースすることをお勧めします。バイナリデータはあなたが思う長さではない可能性があります。あなたはPython 2またはPython 3ですか?バイトと文字列オブジェクトの違いのために問題になるかもしれません。 (また、おそらく無関係ですが、なぜあなたはシェルを使用していますか?) – cdarke