0
我想在UDP上實現一個RFC1350。到目前爲止,所有的流暢發送文件 從服務器到客戶端的工作就像一個魅力,我給了接收數據到服務器和發送數據到客戶端的方法,但這個方向是不行的。蟒蛇 - 套接字沒有收到數據
密鑰服務器代碼:
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包絲毫的文件的名稱,將被轉移
- 服務器RECOG的關鍵。傳輸類型RRQ或WRQ,並開始通過receiveData()監聽 傳輸。發送sendWRQ()現在發生在發送數據或接收任何服務器或客戶端上的一個問題,我得到一個文件絲毫0KB
後
客戶終止所有代碼:
數據包沒有屬性len()...並且如果它有它會返回相同的__len __()。 但這似乎不成問題。由於服務器到客戶端傳輸確實有效。最後一個數據包通常小於512,表示EOF和EOT。 – 2012-03-08 15:19:27
不知道爲什麼__len __()變成格式化後的len()。我猜你得到0kB文件的原因是服務器在用__len __()== 0接收數據包時發生循環 – ciphor 2012-03-08 15:24:11