こんにちは私は、ファイルを転送するために、Pythonでソケットを使ってクライアントとサーバーアーキテクチャを作っています。 Ubuntuでは、Ubuntuではエラーはありませんが、ファイル全体が送信されていません。私が4MBの音楽ファイルを送信しようとすると、50〜60kbしか転送されず、Windowsでは300MBのファイルも完全に送信されます。ここに私のコードです。ソケットを使ったPythonでのファイル転送
のClient
def sendFile(self):
# ''' Print a language constructed from
# the selections made by the user. '''
# print('%s!' % (self.recipient.displayText()))
client_socket.send("upload")
time.sleep(1)
client_socket.send(self.virtual_os[self.os_box.currentIndex()].title())
time.sleep(1)
path = self.recipient.displayText() #inputbox which contains the path of the file
self.recipient.setText('')
name = path.split('/')
name = name[len(name)-1]
print "Opening file - ",name
client_socket.send(name)
time.sleep(1)
fp = open(path,'rb')
data = fp.read()
fp.close()
size = os.path.getsize(path)
size = str(size)
client_socket.send(size)
time.sleep(1)
client_socket.send(data)
print "Data sent successfully"
サーバー -
choice = client_socket.recv(1024)
if(choice == "upload"):
virtual_os = client_socket.recv(1024)
print virtual_os
fname = client_socket.recv(1024)
print "recieved file "+fname
size = client_socket.recv(1024)
size = int(size)
print "The file size is - ",size," bytes"
size = size*2
strng = client_socket.recv(size)
fp = open(fname,'wb')
fp.write(strng)
fp.close()
print "Data Received successfully"
私のコードに問題があるのか、私はそれがUbuntuの上で動作させるために何かを変えなければならないのですか?
なぜあなただけの代わりに '' os.path.getsize() 'の' lenを(データ)を使用していないから、例の一つで、次の得ましたか。 –
os.path.getsize()は、サイズを印刷して正しいサイズを出力するのでうまく動作しますが、len(data)も使用してみました。そして、この問題はUbuntuでしかない。どういうわけか、データの一部だけが送信されます。 –