У меня возникла такая проблема:
для передачи файлов и данных FTP использует соединие отличное от основного, по которому передаются комманды и получаются ответы. Это соединение может открываться либо в пассивном режиме (клиент отсылает запрос PASV и в ответ получает IP + Port к которому клиент должен подключиться - сделать коннект с новым сокетом) либо а активном режиме (клиент отсылает запрос PORT передавая серверу IP + Port к которому тот должен подключиться и начинает прослушивать этот порт, затем сделать Accept на входящий сокет)
Так вот, в обоих случаях этот дополнительный сокет открывается и коннектится без проблем. Затем клиент запрашивает сервер на передачу файла (на пример простая комманда LIST) в ответ сервер должен начать передачу файла по этому вновь открытому каналу.
У меня же, на самом деле, сервер внезапно закрывает связь по каналу данных, при чем с сообщеним, что "удаленный сервер принудительно закрыл связь" (forcibly) после чего он также прекращает отсылать ответы на коммандный канал.
Нужно добавить, что похожие комманды, такие как STOR ( или PUT во всех изветстых клиентах) пользуется тем же механизмом, но работает нормально.
Клиент написан мною на VB.NET, удаленный сервер работает под MVS (или z/OS - mainframe). Использовались классы TcpClient, TcpListener, IPEndPoint.
Хочу отметить, что в то время как мой клиент прекращает работать из-за описанной проблемы, мелкософтовский ftp продолжает работу, так же как и Total Commander.
Нужно отметить, что раньше мой клиент работал отлично, а в последнее время временами да а временами нет. Возможно, что это какие либо настройки сервера меняются.
Вопрос, я понимаю, что у меня что-то не так реализованно как надо (факт что другие клиенты продолжают роботу), но есть ли у кого либо предположения, что это может быть, или на что мне следует обратить особое внимание (возможно даже на уровне определения самого сокета).