Нужна помощь в диагностике проблемы сокета сервера при передаче по FTP с использованием FTP-клиента apache - PullRequest
1 голос
/ 10 августа 2011

Я разработал веб-приложение, которое позволяет клиенту / пользователю загружать файл в память JVM. Код на стороне сервера затем FTP файл на другой сервер. Все это прекрасно работает на моем локальном компьютере, но сейчас я сталкиваюсь с проблемами, заставляя его работать на наших серверах тестовой среды.

На сервере тестовой среды код успешно подключается и регистрируется на удаленном сервере Windows, но зависает при передаче файла. На конечном сервере создается пустой файл, но байты не передаются. Трассировка стека от JVM, которая в конечном итоге убила поток:

[10/08/11 14:45:24:234 BST] 00000003 ThreadMonitor W   WSVR0605W: Thread "WebContainer : 2" (00000033) has been active for 666083 milliseconds and may be hung.  There is/are 1 thread(s) in total in the server that may be hung.
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:431)
at java.net.ServerSocket.implAccept(ServerSocket.java:464)
at java.net.ServerSocket.accept(ServerSocket.java:432)
at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:693)
at org.apache.commons.net.ftp.FTPClient.__storeFile(FTPClient.java:551)
at org.apache.commons.net.ftp.FTPClient.storeFile(FTPClient.java:1704)
... (my own app code stack trace from here on down)

Похоже на проблему с сокетом, но кто-нибудь может мне помочь выяснить, на какой машине эта проблема? Это тестовая среда JVM или конечный сервер Windows? Я предполагаю, что это тестовая среда сервера, в противном случае я бы видел эту проблему на моей локальной машине? Если он находится на сервере тестовой среды, это вопрос открытия портов (и если да, то о чем мне просить)? Любая помощь наиболее ценится.

1 Ответ

2 голосов
/ 10 августа 2011

Для меня это звучит как проблема с брандмауэром, которая может быть решена с помощью пассивного режима для клиента FTP.В активном режиме FTP-сервер пытается установить соединение с FTP-клиентом при передаче файла, и брандмауэр / WAS может не нравиться.режим по умолчанию - ACTIVE, поэтому в своем коде попробуйте вызвать

ftpclient.enterLocalPassiveMode();

после подключения, но до передачи файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...