Виртуальные COM-порты в Windows - эмулятор факса - PullRequest
5 голосов
/ 03 февраля 2009

У меня есть приложение Windows, в котором используется сторонний инструмент ( FaxMan ) для отправки факсов через COM-порт, подключенный к ПК. Чтобы провести стресс-тестирование моего приложения, я хочу создать несколько виртуальных COM-портов, которые претендуют на подключение факс-модемов. Затем я хочу «подделать» отправку факсов, ничего не отправляя физически. Виртуальные COM-порты должны будут реагировать на стандартные AT-команды, как если бы факс отправлялся. Возможность подделывать неудачи будет дополнительным бонусом.

Мои первые мысли - использовать драйвер виртуального COM-порта для перенаправления в telnet или другой сеанс TCP - тогда я мог бы иметь TCP-сервер, который притворяется, что выполняет действия факса. Тем не менее, я рад заплатить за компонент, если он существует.

Ответы [ 3 ]

6 голосов
/ 04 февраля 2009

Я работал над этой проблемой в течение нескольких лет, разрабатывая факс для локальной сети. Я сомневаюсь, что вы можете сделать это хорошо.

Разработка виртуального драйвера COM означает разработку драйвера ядра (если вы не можете купить его с полки): это выполнимо (я сделал это), но я думаю, что это гораздо больше проблем, чем стоит (я был бы удивлен если оно того стоит).

Другая проблема заключается в том, что существует множество факсимильных модемов и стандартов факсимильных модемов (и вы говорите, что надеетесь подражать одному достаточно хорошо, чтобы обмануть FaxMan).

Другая (существенная) проблема заключается в том, что более простые (не исправляющие ошибки) факсимильные протоколы являются (жесткими) протоколом реального времени : существует некоторая (более или менее) буферизация на факс-модеме , но ПК, подключенный к факсимильному модему, не может позволить себе опустошать при отправке или переполнять при получении ... это означает, что перенаправление этого трафика через telnet (с таймерами и буферами TCP) либо в худшем случае прерывает сеанс факса (FaxMan будет тайм-аут) или, в лучшем случае, означает, что ваше тестирование не отражает реальную (неэмулированную) производительность.

Что вы пытаетесь в любом случае подвергнуть стресс-тестированию: ваше приложение или сторонний FaxMan?

Я полагаю, что самым дешевым решением и наиболее реалистичным тестом было бы использование реального оборудования: реальных COM-портов, реальных факсимильных модемов и реальных (или, возможно, имитированных) телефонных линий.


Изменить, чтобы ответить на вопросы из комментариев в ответе Михаила

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

Он может быть небольшим: если ваш нагрузочный тест представляет собой просто «отправку данных факса в корзину битов», то вашему эмулируемому модему в основном нужно просто ответить «ОК» на все / что-либо, похожее на команду AT, а также различные другие ответы. к различным специфическим для факса командам AT + F_whwhat_. Но это довольно скромный, не очень строгий тест.

Это было бы довольно просто - но не существует ли какого-либо протокола, участвующего в передаче данных факса? Или протокол является просто вариантом набора AT-команд, и подделка «OK» - это все, что нужно сделать? Честно говоря, я не знаю, но я предполагал, что будет несколько более сложный протокол.

Протоколы телефонии имеют названия, такие как "T.4" и "T.30". Протокол PC-to-faxmodem обычно представляет собой протокол, называемый «факс класса 1» или «факс класса 2». Последний («класс 2» или «класс 2.0») является более высоким уровнем из двух: больше ASCII и меньше двоичных данных, не так чувствительно ко времени (класс 1 чувствителен к 10 секундам msec iirc), потому что он инкапсулирует / оборачивает больше базовых согласований T.30, чем класс 1; он состоит из расширенных команд AT (то есть команд AT + F_something_ и их ответов) плюс дамп данных изображения факса в двоичном кодировании.

Некоторые ответы - это больше, чем просто «ОК» (т. Е. Они представляют доступные / согласованные параметры сеанса факса), но (в классе 2, а не в классе 1) они кодируются в ASCII, а не в двоичном формате, поэтому не слишком сложно на самом деле вообще.

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

Да, есть рукопожатие («Могу ли я отправить сейчас?») между страницами (т.е. перед каждой страницей). Эмуляция нагрузочного тестирования, которая не проверяет синхронизацию, просто отвечала бы: «Да, продолжайте (я все равно собираюсь выгружать данные в корзину битов, даже не глядя на нее, так что мне все равно)» запрос рукопожатия.

Эмуляция также должна отслеживать двоичные данные изображения (которые она получает от ПК) для <DLE><ETX> и <DLE><DLE>, чтобы ответить ОК в конце PC-dumps-image-data-to -The-модем.

Я не знаю, какие таймеры могут быть встроены в приложение FaxMan (нужно ли вам добавлять искусственные задержки в ваши эмулированные ответы, чтобы не допустить, чтобы FaxMan осознал, что ответы ненормально быстрые): возможно, нет, но возможно .

На странице может быть или не быть рукопожатия:

  • В старых факсимильных аппаратах / факс-протоколах этого нет: вместо этого устройства согласовывают «параметры сеанса факса», включая скорость передачи, перед страницей: они согласовывают синхронную скорость передачи, которую могут поддерживать оба конца. Это (способность синхронно обрабатывать целые страницы данных) является частью того, почему это протокол реального времени.
  • Более новые факсимильные аппараты / факсимильные протоколы поддерживают «исправление ошибок» на каждой странице: страница отправляется меньшими (но все же синхронными) порциями: каждый фрагмент подтверждается, или NAKed и ретранслируется.
0 голосов
/ 12 февраля 2009

Виртуальный модем: http://www.eltima.com/products/virtual-modem-pro/

0 голосов
/ 04 февраля 2009

Я думаю, что Совет ChrisW - это звук, особенно в том, что касается имитаторов телефонных линий, они не слишком дороги и были очень полезны, когда я работал с драйвером модема.

Тем не менее, существует пакет драйверов с открытым исходным кодом, который (согласно их утверждениям) позволяет вам устанавливать пары виртуальных ком-портов: http://com0com.sourceforge.net/

Вы можете подключить приложение FaxMan к одному COM-порту, затем к «симулятору» факса, который обрабатывал набор AT-команд, и все, что находится в протоколе факса, которое вы хотите проверить. Это похоже на то, что вы искали - но ...

  1. Я понятия не имею, насколько хорошо работают драйверы com0com - я никогда даже не загружал их, тем более пробовал их (я не уверен, что должен даже публиковать этот ответ ...)
  2. Я понятия не имею, сколько работы потребуется для написания симуляции ФАКСА; Я думаю, что это не маленькая задача.
...