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
를 얻을 같이 sendData 또는 receiveData에서 서버 또는 클라이언트 양쪽에서 발생을 전송 한 후 종료 코드의 모든 :
- 서버 클래스 : http://www.copypastecode.com/181330/
- 클라이언트 클래스 : http://www.copypastecode.com/181326/
패킷에는 특성 len() ...이 없으면 __len __()과 동일한 결과를 반환합니다. 그러나 이것은 문제가되지 않습니다. 서버 간 전송은 작동하기 때문에. 마지막 패킷은 일반적으로 EOF 및 EOT를 나타내는 512보다 작습니다. –
형식화 된 후 __len __()이 len()이되는 이유를 모릅니다. 나는 당신이 0kB 파일을 가지고있는 이유는 서버가 __len __() == 0으로 패킷을 수신 할 때 루프를 돌파한다는 것입니다. – ciphor