Я работал над этой проблемой в течение нескольких лет, разрабатывая факс для локальной сети. Я сомневаюсь, что вы можете сделать это хорошо.
Разработка виртуального драйвера 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 и ретранслируется.