Разница между Socket.connect (Adreess, timeout) и FTPClient.setSoTimeOu - PullRequest
1 голос
/ 11 сентября 2009

Мы осуществляем FTP-соединение через наше приложение, которое является приложением JAVA. Мы установили тайм-аут для соединения с использованием метода Socket.connect(Adreess,timeout) перед вызовом метода FTPClient.connect().

Во время извлечения файлов с FTP-сайта по тому же соединению мы не установили тайм-аут. Обязательно ли вызывать метод FTPClient.setSoTimeOut(timeout) для установки индивидуального тайм-аута для каждого такого взаимодействия по одному и тому же соединению или метод Socket.connect(Adreess,timeout) будет устанавливать тайм-аут для каждого взаимодействия с FTP-сайтом при одном подключении?

Я также хотел бы знать, в чем разница между этими двумя методами?

1 Ответ

2 голосов
/ 11 сентября 2009

Время ожидания в Socket.connect() - это время ожидания соединения, которое является временем ожидания завершения TCP-квитирования. Этот тайм-аут происходит только один раз для каждого соединения.

setSoTimeout() называется тайм-аутом чтения сокета, который показывает, сколько времени вы ожидаете чтения ожидающих байтов из сокета. Это происходит на каждом сокете, читаемом в течение сеанса TCP.

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

...