Java rxtx com端口

Java rxtx com端口,java,serial-port,rxtx,Java,Serial Port,Rxtx,我正在使用RXTXAPI通过com端口从GPS设备读取数据。现在,我正在通过读取配置文件并查找列出的端口来找到正确的com端口。我遇到的问题是,如果设备拔出,com端口可能会更改,那么用户必须知道如何更改配置文件。我在c#中编写了一个类似的应用程序,能够列出windows设备名而不是com端口,我在com端口中循环,直到设备名与配置文件中的名称匹配。使用该方法,即使正在使用的com端口发生更改,配置文件中的任何内容都不必更改。有没有办法用RXTXAPI实现这一点 提前谢谢 列出系统中可由Java

我正在使用RXTXAPI通过com端口从GPS设备读取数据。现在,我正在通过读取配置文件并查找列出的端口来找到正确的com端口。我遇到的问题是,如果设备拔出,com端口可能会更改,那么用户必须知道如何更改配置文件。我在c#中编写了一个类似的应用程序,能够列出windows设备名而不是com端口,我在com端口中循环,直到设备名与配置文件中的名称匹配。使用该方法,即使正在使用的com端口发生更改,配置文件中的任何内容都不必更改。有没有办法用RXTXAPI实现这一点


提前谢谢

列出系统中可由Javacomm API使用的所有端口。遍历它们以查找设备连接到的端口。

列出了系统中可由Javacomm API使用的所有端口。反复浏览它们以查找设备连接的端口。

如果您想在COM端口上获取与设备相关联的名称(特别是如果安装了驱动程序来提供该名称),则必须使用一点可怕的Java->Native接口与收集此信息的Windows API进行对话。C#很好,因为这些信息是收集并提供给您的,但在Java中,您必须执行这一额外步骤


可能会证明是有用的。我不确定到底是什么API提供了这个功能

如果您想在COM端口上获取与设备相关联的名称(特别是如果安装了驱动程序来提供该名称),那么您必须使用一点可怕的Java->Native接口来与收集此信息的Windows API对话。C#很好,因为这些信息是收集并提供给您的,但在Java中,您必须执行这一额外步骤


可能会证明是有用的。我不确定到底是什么API提供了这个功能

如果有人感兴趣

我在C#中创建了一个监视套接字的windows服务。如果客户端连接到该套接字,该服务将收集该端口上的端口名和设备id,并通过com端口以字符串形式发送数据,然后客户端可以解析该字符串以获取其所需的数据

在我的例子中,传递的字符串是: “ACPI\PNP0501*PNP0501,COM1,PCI\VENU 8086和开发29B7和子系统0211028和版本02 PCI\VENU 8086和开发29B7和子系统0211028 PCI\VENU 8086和开发29B7和开发29B7和抄送070002 PCI\VENU 8086和开发29B7和抄送0700,COM3,USB\Vid 067b和Pid 2303和版本0400 USB\Vid 067b和Pid COMU”

当我解析它时,我可以看到ACPI\PNP0501*PNP0501是COM 1的设备id,COM3有三个设备id,COM5上有两个设备id


这可能不是处理这个问题的最佳方式,但它足以满足我的需要,并且它将我从JNI中解救出来。:)

如果有人感兴趣

我在C#中创建了一个监视套接字的windows服务。如果客户端连接到该套接字,该服务将收集该端口上的端口名和设备id,并通过com端口以字符串形式发送数据,然后客户端可以解析该字符串以获取其所需的数据

在我的例子中,传递的字符串是: “ACPI\PNP0501*PNP0501,COM1,PCI\VENU 8086和开发29B7和子系统0211028和版本02 PCI\VENU 8086和开发29B7和子系统0211028 PCI\VENU 8086和开发29B7和开发29B7和抄送070002 PCI\VENU 8086和开发29B7和抄送0700,COM3,USB\Vid 067b和Pid 2303和版本0400 USB\Vid 067b和Pid COMU”

当我解析它时,我可以看到ACPI\PNP0501*PNP0501是COM 1的设备id,COM3有三个设备id,COM5上有两个设备id


这可能不是处理这个问题的最佳方式,但它足以满足我的需要,并且它将我从JNI中解救出来。:)

我已经这样做了,但它没有给我使用端口的设备的设备id,它只是返回每个端口的ComPortIdentifier。使用它,你可以得到端口名(ie COM3),但不能得到设备id,因此我仍然需要知道我正在寻找的端口。你需要它的具体用途是什么?从您的问题来看,您似乎希望枚举所有可用端口以找到您要查找的端口,这样就不需要更改配置文件。这应该对你有帮助,除非你问错了问题。:)按照您的建议,如果设备在拔出并重新插入后获得新的com端口(这在我的系统中经常发生),我仍然必须更改配置文件。我在C#中的代码在com端口上查找设备名称(不会更改),因此即使com端口更改,应用程序仍然可以找到正确的端口。希望这会更有意义。我还是不太理解你的问题。为什么名字很重要?您可以枚举存在的所有端口。你要找的港口就是其中之一!它将永远是,它的名字是完全无关的。另外,在遍历所有可用端口时,不需要将端口名存储在配置文件中。我有一个id为“USB\Vid_067b&Pid_2003”的设备,它位于COM5上。如果我按端口名搜索,那么如果设备已拔出并重新插入,并且端口更改为COM6,那么我必须更改配置文件。但是,如果我可以搜索任何拥有该id的设备的端口,那么我就不必关心它在哪个端口上。我可以在每个端口上滚动寻找一个id永远不会改变的设备,因此我永远不需要改变配置文件。我已经这样做了,但它没有给我使用端口的设备的设备id,它只是返回每个端口的组件标识符。使用它,你可以得到端口名(ie COM3),但不能得到设备id,因此我仍然需要知道我正在寻找的端口。你需要它的具体用途是什么?从您的问题来看,您似乎希望枚举所有可用端口以找到您要查找的端口,这样就不需要更改配置文件。这应该对你有帮助,除非你问错了问题。:)按照你的建议,我