2017-06-29 103 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函數,其目的是爲了方便與打印機進行默認和自定義查詢的通信。像墨水量和打印機狀態這樣的東西可以這樣查詢。我再次強調,設備通過不同的端口處理不同的查詢/響應是很常見的。一個數據通道,一個狀態通道等等。不需要配置,但是語言監視器或端口監視器(讓我們假設它們是組合的)應該知道如何執行這些查詢,這涉及知道使用哪個通道。 –