UDPの上にRFC1350を実装しようとしています。これまでのところすべてがスムーズにファイルを送信していました クライアントからサーバーへのデータを受信してクライアントにデータを送信する方法を与えた魅力的な方法でしたが、この方向性はありません。pythonソケットがデータを受信していません
キーサーバーコード:
def listen(self):
while True:
packet, address = self.serverSocket.recvfrom(512)
mode = str(packet)[2:5]
self.file = str(str(packet)[6:]).replace("'", "")
if(mode == "RRQ"):
self.sendResponse(address)
else:
self.receiveData()
def receiveData(self):
data = open("new1.jpg", "wb")
while True:
packet, server = self.serverSocket.recvfrom(512)
if packet.__len__() == 512:
data.write(packet)
else:
data.write(packet)
break;
キークライアントコード:
def sendWRQ(self):
request = 'WRQ-' + self.file
self.clientSocket.sendto(str(request).encode(), (self.serverAddress, self.serverPort))
self.sendData()
def sendData(self):
with open(self.file, "rb") as data:
while True:
packet = data.read(512)
if packet != b"":
self.clientSocket.sendto(packet, (self.serverAddress, self.serverPort))
else:
self.clientSocket.sendto(packet, (self.serverAddress, self.serverPort))
break
time.sleep(0.0005)
- クライアントはWRQパケットを送信し、転送
- サーバーの個人認証の鍵となるファイルの名前を聖霊降臨祭。転送タイプRRQまたはWRQを受信し、receiveData()を介して の転送をリッスンし始めます。
クライアントがsendWRQ()今の問題は、私は、ファイルの聖霊降臨祭0KB
を得るのsendDataかreceiveDataのサーバーまたはクライアント側のいずれかで発生を送信した後に終了コードのすべて:
- サーバ・クラス:http://www.copypastecode.com/181330/
- クライアントクラス:http://www.copypastecode.com/181326/
パケットには属性len()がありません。それがあった場合、__len __()と同じものを返します。 しかし、これは問題ではないようです。サーバーからクライアントへの転送が機能するためです。最後のパケットは通常、EOFとEOTを示す512より小さい。 –
フォーマット後に__len __()がlen()になる理由がわかりません。私はあなたが0kBのファイルを持っている理由は、サーバが__len __()== 0でパケットを受信するときにループを壊すということです – ciphor