2017-06-29 104 views
0

我有一个语言监视器,我试图从中查询打印机。从打印监视器写入多个TCP端口

首先让我为可能的困惑道歉,因为“port”在本说明中表示2件事情。有一种用法指的是打印机配置使用的端口,可以是TCP,USB等。然后使用指向端口地址的端口来在与打印机通信时发送数据IP地址。

我需要能够指定不同的端口地址,通过特定于其固件的相同IP将不同的定制查询发送到打印机。我找不到任何有关执行此通信的标准方式的示例或文档...我可以提取IP地址并打开一个网络套接字,但我不确定这是否是处理此通信的适当方式。打印机通过一个端口发送状态并将数据打印到另一端口并不罕见。如果我想写入默认端口,我可以使用pfnWritePort和pfnReadPort,但是这些不允许我指定实际的端口..它使用任何驱动程序配置为。

任何人都可以提供一些指导或例子,我应该如何从我的语言监视器做到这一点?

编辑:作为澄清的一个例子,所有命令都发送到相同的IP,但根据我需要发送的命令/查询,TCP端口需​​要更改。我现在处理它的方式是打开一个具有相同IP和用于数据和状态通道的不同端口号的网络套接字。

+0

你应该明确地定义平台,windows是暗示这些id的?你用口头词来混淆你自己。前面你的意思是一个永远不会被称为端口,它是一个接口。 Windows GUI架构虽然使用术语端口来描述打印机的引用虚拟接口。后者是“多个TCP端口” – Swift

+0

欢迎使用堆栈溢出。请阅读[介绍游览](https://stackoverflow.com/tour),[如何提问](https://stackoverflow.com/help/how-to-ask)和[如何提供很好的示例指南] (https://stackoverflow.com/help/mcve)。 – ArturFH

+0

我只在Windows驱动程序开发中做过少量工作,主要使用现有项目作为示例。我对“混淆”和“缺乏定义”这两个词表示歉意。其中一些是我不熟悉我正在使用哪些技术来定义。你的假设是正确的斯威夫特。我将在未来的回应中将它们称为虚拟接口(Windows端口)和TCP端口,以避免混淆。 –

回答

0

您应该被要求编写一个能够重新配置驱动程序的应用程序。 OS的意识形态是每个真实的设备都对应于驱动程序和/或接口的实例。这可能是一种高级操作,因为它需要创建新的打印机界面(Windows GUI术语中的“端口”)并更改驱动程序设置。

+0

为了确保我正确理解您,您是否声明单个驱动程序实例不应该与每个实际设备通信,并且外部应用程序应该管理这些实例的创建和配置,以便它们可以共同用于通信? 你能澄清什么是真正的设备?所有的通信都是通过相同的设备和连接进行的,只需要根据命令/查询的不同通道,在相同的IP(在这种情况下为TCP端口)的不同通道上进行,这就是驱动程序 - 特别是打印监视器 - 需要知道的内容路线。 –

+0

@Christopher Whittier语言监视器的目的不是路由..它是假脱机和端口监视器之间的数据转换。为什么你会有这样的设置。哦,有像https://docs.microsoft.com/en-us/windows-hardware/drivers/print/combined-language-and-port-monitor的东西 – Swift

+0

打印监视器提供了一个SendRecvBidiDataFromPort函数,其目的是为了方便与打印机进行默认和自定义查询的通信。像墨水量和打印机状态这样的东西可以这样查询。我再次强调,设备通过不同的端口处理不同的查询/响应是很常见的。一个数据通道,一个状态通道等等。不需要配置,但是语言监视器或端口监视器(让我们假设它们是组合的)应该知道如何执行这些查询,这涉及知道使用哪个通道。 –