Имитация сброса / тайм-аута подключения к сокету в Windows 7 - PullRequest
4 голосов
/ 08 ноября 2010

Я бы хотел смоделировать соединение с сокетом, чтобы оно испортилось, чтобы протестировать мое приложение. Цель состоит в том, чтобы проверить, работает ли мой Java-код так, как он ожидал, когда постоянное сокетное соединение с удаленным сервером сбрасывается во время выполнения или сервер становится недоступным.

Я попытался создать правило брандмауэра в брандмауэре Windows. Однако включение правила не влияет на уже открытое сокетное соединение. Протягивать сетевой кабель не вариант, потому что я должен выполнить эти тесты через подключение к удаленному рабочему столу сервера, на котором выполняется мой код.

Ответы [ 4 ]

1 голос
/ 28 ноября 2010

Я понимаю, что это не напрямую под Windows, но, учитывая природу Java, он все еще может работать.

Существует программа под названием Netem под Linux, которая, учитывая ваш код на java, может запускаться. Я никогда не использовал его, поэтому я не могу засвидетельствовать его способности или использование, но здесь есть несколько примеров использования здесь . Вы можете довольно просто запустить Linux внутри виртуальной машины (например, в виде бесплатного (как в пиве или в виде свободной речи, которым вы наслаждаетесь в Великобритании) VirtualBox) и, надеюсь, ваше Java-приложение внутри этого.

Может быть не идеальным, и извините за общее отсутствие ноу-хау, но это может работать для того, что вам нужно

0 голосов
/ 03 сентября 2014

Установите время ожидания чтения сокета программно на 1 миллисекунду, и вы всегда получите исключение java.net.SocketTimeoutException.

0 голосов
/ 28 ноября 2010

Вы можете просто убить клиентское приложение.

Кроме того, вы могли бы сделать это, создав для этого очень простое прокси-приложение, которое обычно просто перенаправляет данные, но которое вы можете запрограммировать, чтобы дать ему команды для выполнения различных других задач. Или вместо программной имитации разорванного соединения просто убейте это прокси-приложение, если по какой-то причине вы не можете убить свое клиентское приложение.

0 голосов
/ 08 ноября 2010

Простой, уродливый и опасный способ сделать это - быстро отключить, а затем включить правильный NetworkAdapter через VBScript и WMI.

Более надежным, но немного сложным в настройке решением было бы использование эмулятора WAN для имитации потери пакетов, отключений и высокой задержки. Ваш лучший бесплатный вариант здесь - dummynet , хотя существует множество дорогих и удобных решений.

Если есть более простой способ сделать это в Windows и Linux без использования загрузочных дисков FreeBSD и виртуальных серверов с двумя сетевыми картами, я также хотел бы услышать это!

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