FTP връзка inputstream увисва

Използвам apache commons net FTPSClient за свързване към локален ftp (пасивен режим). Връзката изглежда прекъсва след това

> LIST
< 150 Opening ASCII mode data connection for /bin/ls.

Добавих малко регистриране към класа FTPClient, за да видя къде точно виси. Това е в този метод: http://grepcode.com/file/repo1.maven.org/maven2/commons-net/commons-net/3.3/org/apache/commons/net/ftp/FTPClient.java#FTPClient.initiateListParsing%28org.apache.commons.net.ftp.FTPFileEntryParser%2Cjava.lang.String%29

Сокетът се създава и socket.isBound() връща true, както и socket.isConnected(), докато socket.isInputShutDown() връща false. Всичко изглежда добре, докато ftp клиентът действително не се опита да прочете от входния поток, това виси за неопределено време без никакви предстоящи данни. Wireshark не е опция поради използването на SSL.

На този етап (поради състоянието на сокета) съм изключил проблеми със защитната стена, но съм на загуба какво може да причинява увисването. Предполагам, че е от страна на сървъра и мога да говоря с хората, които го управляват, но би било полезно, ако мога да им кажа къде да търсят.

АКТУАЛИЗАЦИЯ

Ще се радвам на обяснение, ако въпросът бъде гласуван против или гласуван за затваряне... Струва ми се, че е перфектен въпрос за stackoverflow.


person nablex    schedule 24.01.2014    source източник
comment
А, връзката във въпроса...?   -  person nablex    schedule 24.01.2014
comment
Това не е вашият код... това е кодът за FTPClient, който използвате   -  person Peter Svensson    schedule 24.01.2014
comment
Уху, и FTPClient виси, когато се опитва да прочете от входния поток, създаден от сокета...   -  person nablex    schedule 24.01.2014


Отговори (1)


С FTPS трябва да използвате PROT P, за да направите канала за данни TLS или PROT C за незащитен канал за данни. Може да увисне, защото клиентът и сървърът не са съгласни относно защитата на канала, напр. клиентите чакат некриптирани данни от сървъра, докато сървърът чака TLS клиент Здравейте от клиента, за да започне криптирането. Така че, моля, проверете комуникацията си за команда "PROT" и отговорите към нея.

Други проблеми може да са, ако FTP сървърът е зад рутер или защитна стена. Режимът PASV се използва, когато клиентът е зад защитна стена, но ще създаде проблеми, ако сървърът е зад тъпа защитна стена или NAT. Опитайте дали обикновеният (напр. не-TLS) FTP работи.

person Steffen Ullrich    schedule 24.01.2014
comment
Проблемът наистина беше свързан с липсващо ръкостискане. Благодаря много! - person nablex; 24.01.2014