我有一个Windows应用程序,该应用程序利用第三方工具(FaxMan)通过连接到PC的COM端口发送传真。为了对我的应用程序进行压力测试,我想创建一些虚拟COM端口,这些端口假装有传真调制解调器。然后,我想“欺骗”传真的发送,而不实际发送任何东西。虚拟COM端口将需要响应标准AT命令,就像正在发送传真一样。欺骗失败的能力将是额外的收获。
我的第一个想法是使用虚拟COM端口驱动程序重定向到telnet或其他TCP session -然后,我可以拥有一个假装通过传真 Action 的TCP服务器。但是,如果存在某个组件,我很乐意支付。
最佳答案
我在这个问题上工作了几年,开发了LAN传真产品。我怀疑你能做好。
开发一个虚拟的COM驱动程序意味着开发一个内核驱动程序(除非您可以买到现成的驱动程序):这是可行的(我做到了),但我想它的麻烦远远超过了它的值(value)(如果它值得的话,我会感到惊讶。您的一会儿)。
另一个问题是,存在各种各样的传真调制解调器和传真调制解调器标准(并且您说您希望模拟得足够好以欺骗FaxMan)。
另一个(基本)问题是,较简单的(非纠错)传真协议(protocol)是(硬)实时协议(protocol):传真调制解调器上有一些(或多或少)缓冲,但是连接到PC的PC传真调制解调器无法承受发送时的欠载或接收时的重载... ...这意味着通过telnet(使用TCP计时器和缓冲区)重定向此流量可能会使传真 session 在最坏的情况下(FaxMan超时)或以最佳的方式中断。您的测试不能代表实际(非模拟)性能。
无论如何,您要尝试进行哪些压力测试:您的应用程序还是第三方FaxMan?
我建议最便宜的解决方案和最实际的测试应该使用真实的硬件:真实的COM端口,真实的传真调制解调器和真实的(或可能是模拟的)电话线。
编辑以回答迈克尔回答中评论中的问题
它可能很小:如果您的负载测试仅是“将传真数据发送到位存储桶”,那么您的仿真调制解调器通常只需要对看起来像AT命令的所有/任何内容都做出“确定”响应,以及对各种内容的各种其他响应即可传真专用的AT + F_whatever_命令。但这是一个相当低的保真度,而不是一个非常严格的测试。
电话协议(protocol)的名称类似“T.4”和“T.30”。 PC到传真调制解调器协议(protocol)通常是称为“1类传真”或“2类传真”的协议(protocol)。后者(“类2”或“类2.0”)是两者中的较高级别:更多的ASCII和更少的二进制数据,不是那么对时间敏感的(类1对10秒的sec iirc敏感),因为它封装了/比第1类包装更多的基础T.30协商;它由扩展的AT命令(即AT + F_something_命令及其响应)以及二进制编码的传真图像数据的转储组成。
有些响应不仅仅是“OK”(即代表可用/协商的传真 session 参数),而且(在2类而非1类中)它们是ASCII编码而不是二进制的,因此,实际上一点也不难。
是的,在页面之间(即每页之前)有一些握手(“我可以现在发送吗?”)。一个不测试时序的负载测试仿真只会响应“是的,继续(我只会将数据转储到位存储桶中,而无需查看它,所以我在乎什么)”握手查询。
该仿真还必须监视<DLE><ETX>
和<DLE><DLE>
的二进制图像数据(从PC那里获取),以便在PC-dumps-image-data-to-modem末尾响应OK。
我不知道FaxMan应用程序中可能内置了哪些计时器(是否可能需要在模拟响应中添加人为延迟,以防止FaxMan意识到响应异常快):也许不是,但是也许。
页面内可能有或没有任何握手:
关于windows - Windows中的虚拟COM端口-传真模拟器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/508810/