5 Stimmen

ftp programmieren: Wie bricht man eine Dateiübertragung ab?

Ich mache einen kleinen FTP-Client, um einige große Dateien von FTP zu erhalten. Ich habe im RFC gelesen, dass der ABOR-Befehl für Server sehr problematisch ist. Fast alle Server, die ich sehe, senden weiterhin Daten, auch nachdem ABOR über die Kontrollverbindung gesendet wurde. Das Beenden der Datenübertragung kann (in 70% der Tests) dazu führen, dass auch die Kontrollverbindung beendet wird. Der Server sendet einfach ein FIN-Paket, nachdem ich ein ABOR-Paket gesendet habe. Was ist die beste Methode, um den Empfang bei einem Byte zu stoppen und die Kontrollverbindung nicht zu verlieren? FlashFXP macht das bei allen Arten von Verbindungsverzögerungen und Servern gut. Bei der Untersuchung des TCP-Verkehrs habe ich den Standard-ftp rfc flow gefunden.

Aber in meinem Fall ist es immer noch nicht gelungen, die Übertragung mit dieser Technik abzubrechen:

1) shutdown(passive_socket, SD_BOTH)

2) closesocket(passive_socket);

3) send(control_socket, "ABOR \r\n ")

4) recv(control_socket) - hier blockiert

Dankeschön

6voto

Sergey Punkte 685

Die "ABOR \r\n Der Befehl "send()" sollte als Out-of-Band-Daten gesendet werden. Im Falle von send() -

send(control_socket, "ABOR\r\n", 6, MSG_OOB);

Einige Zeit nachdem Sie recv() Code 426 Übertragung abgebrochen. Datenverbindung geschlossen.

Der folgende Link ist hilfreicher, wenn Sie keinen Erfolg bei der Übertragung erzielen können: http://www.developer.nokia.com/Community/Discussion/showthread.php?134079-Telnet-quot-Interrupt-Process-quot-(IP)-signal-amp-Telnet-quot-Synch-quot

0voto

Rocky Pulley Punkte 21329

Sie sollten Ihre Steuerverbindung nicht verlieren, wenn Sie die Datenübertragungsverbindung schließen, da es sich um zwei getrennte Buchsen handelt. Überprüfen Sie vielleicht Ihren Code, um zu sehen, warum die Steuerverbindung geschlossen wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X