私は次のように動作するPythonプログラムを開発中です: サーバとクライアントがtcpソケットでファイルを転送するクライアントがあります。サーバーとサーバーへのファイル要求は、ファイルがあれば元に戻します。 サーバーはまた、新しいRSAキーペアを生成し、指定された名前で名前を付けます(raw-inputで名前を取得します)、キーを別の場所に保存します。Python、サーバ上のMuiltiスレッド、別々の細かい、一緒に動作しない
私のサーバーのコードは、私は別々に2つの機能をテストしましたが、どちらもうまく動作します。しかし、私は2つのスレッドを開いてそれらを一緒にしようとすると、何も表示されません。
import sys
import socket
import os
import threading
def sendKey(func):
host = ''
skServer = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
skServer.bind((host,2525))
skServer.listen(10)
print "Server Active"
bFileFound = 0
path="/Users/ChunjieXu/Desktop/Publickeys"
os.chdir(path)
while True:
Content,Address = skServer.accept()
print Address
sFileName = Content.recv(1024)
for file in os.listdir(path):
if file == sFileName:
bFileFound = 1
break
if bFileFound == 0:
print sFileName+" Not Found On Server"
else:
print sFileName+" File Found"
fUploadFile = open(sFileName,"rb")
sRead = fUploadFile.read(1024)
while sRead:
Content.send(sRead)
sRead = fUploadFile.read(1024)
print "Sending Completed"
break
Content.close()
skServer.close()
def genkeys(func):
while True:
path="/Users/ChunjieXu/Desktop/Publickeys"
files=os.listdir(path)
piname=raw_input('Please enter the Pi Name (5 letters):')
if piname in files:
print('Name exists, please enter a new name.')
else:
os.chdir('/Users/ChunjieXu/Desktop/Allkeys')
os.makedirs(piname)
os.chdir(piname)
os.system('openssl req -new -x509 -keyout ./cakey.pem -out cacert.pem -days 365')
os.system('cp cakey.pem cakey.pem.enc')
os.system('openssl rsa -in ./cakey.pem.enc -out ./cakey.pem')
os.system('openssl rsa -in ./cakey.pem.enc -passin pass:1234 -pubout -out ./capublickey.pem')
for old_name in os.listdir('.'):
prefix=piname
new_name=prefix+old_name
os.rename(old_name,new_name)
for keys in os.listdir('.'):
result=piname+'capublickey.pem'
shutil.copy(result,path)
threads=[]
t1=threading.Thread(target=sendKey,)
threads.append(t1)
t2=threading.Thread(target=genkeys,)
threads.append(t2)
if __name__ == '__main__':
for t in threads:
t.setDaemon(True)
t.start()
print 'done'
は、ここでは、クライアントの私のコードです:私は 'のpython server.py'
ユーザー$パイソンserver.py
行わを行う際
import sys import socket import os skClient = socket.socket(socket.AF_INET, socket.SOCK_STREAM) skClient.connect(("127.0.0.1",2525)) sFileName = raw_input("Enter Filename to download from server : ") sData = "Temp" path = "/Users/ChunjieXu/Desktop/Publickeysnode0" os.chdir(path) 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()
は、ここに出力です
私はスレッドに新しく、そこに何が起こっているのか非常に明確ではない、誰もそれを手伝ってくれる?あらゆるヒントは歓迎され、感謝していますどうもありがとうございます。
はい、どうもありがとうございました、私はそれを修正し、それが最初の時間のために働いた、そして私は他のファイルをダウンロードしたり、新しいキーを生成しようとした場合、私は他の問題を持っています..... –
@jenny徐春杰投稿したコードを見ると、whileループの最後に 'break'ステートメントがあるようです。 Pythonが 'break'ステートメントを実行すると、現在のループから抜けるため、プログラムは' break'ステートメントがある間に一度だけ実行されます。 – RoboKincaid
@jenny徐春もまた、すでに存在するディレクトリを作成しようとすると、 'os.makedirs'は' OSError'をスローします。 – RoboKincaid