我正在开发一个python程序,其工作原理如下: 有一个服务器和一个客户机通过tcp套接字传输文件,更具体地说,客户机向服务器发送文件请求,服务器将文件发回(如果他有)。 服务器还生成新的RSA密钥对,并按给定的名称命名(通过原始输入获取名称),然后将密钥保存到不同的位置
这是我的服务器代码,我分别测试了这两个函数,它们都工作得很好。但是当我试图打开两条线把它们放在一起时,什么也没有出现
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'
这是我的客户代码:
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()
这是我执行“python server.py”时的输出
user$ python server.py
done
我是新手,不太清楚那里发生了什么,有人能帮我吗?欢迎提供任何建议。非常感谢
程序不会等待线程完成。你正在启动线程,然后你的程序正在打印“完成”并在线程有机会完成之前退出
要等待线程完成,应该对其调用join方法
下面是一个使用main方法的示例:
相关问题 更多 >
编程相关推荐