Срочно - FTP сервер обрывает соединение для передачи данных.

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

kpoxa
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 26.10.2008 (Вс) 17:10

Срочно - FTP сервер обрывает соединение для передачи данных.

Сообщение kpoxa » 26.10.2008 (Вс) 17:14

У меня возникла такая проблема:
для передачи файлов и данных FTP использует соединие отличное от основного, по которому передаются комманды и получаются ответы. Это соединение может открываться либо в пассивном режиме (клиент отсылает запрос PASV и в ответ получает IP + Port к которому клиент должен подключиться - сделать коннект с новым сокетом) либо а активном режиме (клиент отсылает запрос PORT передавая серверу IP + Port к которому тот должен подключиться и начинает прослушивать этот порт, затем сделать Accept на входящий сокет)
Так вот, в обоих случаях этот дополнительный сокет открывается и коннектится без проблем. Затем клиент запрашивает сервер на передачу файла (на пример простая комманда LIST) в ответ сервер должен начать передачу файла по этому вновь открытому каналу.

У меня же, на самом деле, сервер внезапно закрывает связь по каналу данных, при чем с сообщеним, что "удаленный сервер принудительно закрыл связь" (forcibly) после чего он также прекращает отсылать ответы на коммандный канал.
Нужно добавить, что похожие комманды, такие как STOR ( или PUT во всех изветстых клиентах) пользуется тем же механизмом, но работает нормально.

Клиент написан мною на VB.NET, удаленный сервер работает под MVS (или z/OS - mainframe). Использовались классы TcpClient, TcpListener, IPEndPoint.
Хочу отметить, что в то время как мой клиент прекращает работать из-за описанной проблемы, мелкософтовский ftp продолжает работу, так же как и Total Commander.

Нужно отметить, что раньше мой клиент работал отлично, а в последнее время временами да а временами нет. Возможно, что это какие либо настройки сервера меняются.

Вопрос, я понимаю, что у меня что-то не так реализованно как надо (факт что другие клиенты продолжают роботу), но есть ли у кого либо предположения, что это может быть, или на что мне следует обратить особое внимание (возможно даже на уровне определения самого сокета).

kpoxa
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 26.10.2008 (Вс) 17:10

Re: Срочно - FTP сервер обрывает соединение для передачи данных.

Сообщение kpoxa » 02.11.2008 (Вс) 17:56

Все, разобрался.
Проблема была в свойствах сокета SendTimeout и ReceiveTimeout. В анотациях к этим свойствам написано, что время задается в "единицах времени", а в одном месте я увидел, что эти еденицы измеряются в секундах. Соответсвенно sock.ReceiveTimeout=10 равен 10 секундам. Поэтому была проблема.
Лишь при более глубоком изучении документации по сокетам, я обнаружил, что время задается не в секундах а в мили секуднах (блин). Естественно, что при timeout=10 msec ни один пакет не успеет добраться до другого конца, особенно при больших расстояниях, вот сервер и рвал соединение.
Когда я исправил sock.ReceiveTimeout=10000 , все заработало нормально.
Жаль, что никто не обратил моего внимание на этот аспект. Эта ошибка, одна из тех идиотских, на которые можно потратить уйму времени, пока её обнаружишь.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 98

    TopList