Сокеты Java и настройка TCP - PullRequest
2 голосов
/ 21 сентября 2009

Я пытаюсь разработать приложение для передачи файлов на Java с апплетом в качестве клиента и отдельным приложением java в качестве сервера (на выделенной машине, размещенной в центре обработки данных). Я использую DataOutputStream / DataInputStream для передачи данных с обеих сторон. Когда я отправляю большие объемы данных, полоса пропускания очень изменчива: сначала все в порядке, затем поток tcp замораживается в течение 40-50 секунд, пока ничего не передается, а затем начинается снова.

Когда я смотрю на поток tcp с помощью Ethereal, я вижу дубликаты подтверждений, быстрые повторные передачи и повторные передачи tcp. Но я не думаю, что проблема связана с Java: у меня та же проблема с передачей по FTP в FileZilla. Но ... когда я пытаюсь передать данные с помощью netcat (клиент netcat + сервер netcat), все в порядке, полоса пропускания стабильна, потерянные tcp-пакеты, похоже, немедленно передаются без какой-либо паузы, независимо от объема передачи. 1003 *

Это как если бы Java не был настолько талантлив, как netcat, чтобы играть с потоками tcp ...

Я пытался играть с Socket.setSendBufferSize (), но я не увидел никакой разницы. Есть идеи?

Спасибо! И извините за мой плохой английский ...

Ответы [ 2 ]

1 голос
/ 21 сентября 2009

Мистер amischiefr прав! Это та же проблема, что и в другом потоке. Моя проблема была решена путем замены DataXXXputStream на BufferedXXXputstream. Методы write (byte [], off, len) одинаковы, и документ не говорит о таком различном поведении. DataOutputStream буферизируется, BufferedOutputStream тоже, но второй делает это намного лучше. Спасибо!

0 голосов
/ 21 сентября 2009

Похоже, ваша сеть перегружена, и вы видите, что оконное TCP-соединение (я считаю, что это правильный термин) в основном ограничивает пропускную способность.

...