2011-06-23 12 views
5

Bazı büyük dosyaları ftp'den almak için küçük ftp istemcisi yapıyorum. RFC'de, ABOR komutunun sunucular için çok sorunlu olduğunu okudum. Gördüğüm neredeyse tüm sunucular, ABOR kontrol bağlantısı yoluyla gönderildikten sonra bile veri göndermeye devam ediyor. Veri aktarımının kapatılması, kontrol bağlantısının kapatılmasında da (testlerin% 70'inde) sonuçlanabilir. Sunucu, itilmiş ABOR paketimden sonra FIN paketini gönderir. Bazı baytlarda almayı durdurmak ve kontrol bağlantısını kaybetmemek için en iyi yöntem hangisidir? FlashFXP, her türlü bağlantı gecikmesi ve sunucuda bunu tamamlıyor. Tcp trafiğini araştırırken standart ftp rfc akışı buldum. programlama ftp: dosya aktarımı nasıl iptal edilir?

Ama benim durumumda

hala hiçbir başarı bu tekniği kullanarak transferi iptal etmek:

1) kapatma (passive_socket, SD_BOTH)

2) kapatması (passive_socket);

3) göndermek (control_socket, "ABOR \ r \ n")

4) recv (control_socket) -

teşekkür ederiz burada durdu

cevap

6

"ABOR \ r \ n" komutu bant dışı veri olarak gönderilmelidir. send durumunda() in -

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

sen recv bir süre sonra() kodu 426 Transferi iptal edildi. Veri bağlantısı kapalı. http://www.developer.nokia.com/Community/Discussion/showthread.php?134079-Telnet-quot-Interrupt-Process-quot-(IP)-signal-amp-Telnet-quot-Synch-quot

Ben birkaç kez, bağımsız Ftpd sunucusu sadece FIN paketi gönderir freebsd altında, daha sonra müvekkilim istiyorum checked
+1

[SO] ile ilgili başka bir soruda OOB verilerini okuyordum (http://stackoverflow.com/questions/589928/socket-programming-how-do-i-handle-out-of-band-data/591104 # 591104) ve bu kullanım örneğini OOB verilerinin tipik bir kullanımı olarak belirtiyorlar. Bununla birlikte, belirli bir sunucu mimarisine bağlı olduğu göz önüne alındığında bunun gerekli (veya hatta tavsiye edilen) neden olduğu konusunda kafam karıştı. Sunucu kontrol bağlantısını düzgün bir şekilde dinliyor ve 'ABOR 'komutunu işliyorsa, veri bağlantı soketini sadece kapatabilir veya göndermeyi kesebilir, değil mi? –

+1

@ André, bant dışı verilerinden çıkarıldı: "Acil veriler", alıcı bağlantıyı ayrı akışın ana akıştan daha önemli olduğunu bildirir. Bu nedenle, ana akışı normal olarak işlemek için öncelikle ayrı akışı kontrol etmelidir. Ama gerçek dünyada (sanırım) sadece pencere boyutu veya başka bir şeyden bağımsız olarak PSH seti ile veri TCP paketi göndermek anlamına gelir.Ben de kafam karıştı çünkü bu sadece ilk önce bulduğum FTP protokolüyle ilgili. – Sergey

+0

Nasıl çalıştığını anlıyorum. Bununla birlikte, istemci bağlantı programından kontrol bağlantı durumuna saygı duyarsanız, sunucuya "ABOR" ulaştığında, sunucu tarafındaki kontrol bağlantısının giriş arabelleğinde * hiçbir şey * olmamalıdır. Eğer OOB kullanılması bu komutun yorumlanmasının hızı üzerinde bir etkiye sahipse, veri bağlantısının daha hızlı veri göndermeyi durdurduğunu anlayacağım. Ancak, OOB kullanmak, herhangi bir FTP sunucusu uygulamasında * ABOR komutunun nasıl yorumlanacağını (OP'nin durumunda olduğu gibi VS) nasıl açıklayacağını açıklamamaktadır. –

0

kapatırken Eğer kontrol bağlantısı kaybetmemelidir veri aktarım bağlantısı, bunlar iki ayrı sokettir. Kontrol bağlantısının neden kapalı olduğunu görmek için kodunuzu kontrol edin.

+0

kontrol etmek şeyler gönderir: Eğer transferi aborint başarı elde edemez eğer

aşağıdaki linki daha yararlıdır Soket sunucu RST gönderir. – Sergey

+0

Başka bir seçenek, kodunuzun bu bağlantı kesintilerinde otomatik yeniden bağlanmasını sağlamaktır. FileZilla'nın bunu yaptığını fark ettim. –

+0

Şimdi yapıyorum, ama bu gerçekten uzun zaman alıyor. Kod, Windows sürücüleri ile karışıyor ve bu tür gecikmeler yapamıyorum. ABOR komutu-sprintf (tb, "% c% c% c% c% cABOR \ r \ n", 0xff, 0xf4, 0xff, 0xfd, 0x06) göndermek için bu kodu kullanıyorum; RFC'de belirtildiği gibi, ABOR komutu özel işlem gerektirebilir (kodlar ctrl-c) – Sergey