龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

Java串行端口技术协议[组图](3)

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
1.枚举出系统所有的RS232端口 在开始使用RS232端口通讯之前,我们想知道系统有哪些端口是可用的,以下代码列出系统中所有可用的RS232端口: Enumeration en

  1.枚举出系统所有的RS232端口

  在开始使用RS232端口通讯之前,我们想知道系统有哪些端口是可用的,以下代码列出系统中所有可用的RS232端口:

  Enumeration en = CommPortIdentifier.getPortIdentifiers();

  CommPortIdentifier portId;

  while (en.hasMoreElements())

  {

  portId = (CommPortIdentifier) en.nextElement();

  /*如果端口类型是串口,则打印出其端口信息*/

  if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL)

  {

  System.out.println(portId.getName());

  }

  }

  在我的电脑上以上程序输出以下结果:

  COM1

  COM2

  CommPortIdentifier类的getPortIdentifiers方法可以找到系统所有的串口,每个串口对应一个CommPortIdentifier类的实例。

  2.打开端口

  如果你使用端口,必须先打开它。

  try{

  CommPort serialPort = portId.open("My App", 60);

  /*从端口中读取数据*/

  InputStream input = serialPort.getInputStream();

  input.read(...);

  /*往端口中写数据*/

  OutputStream output = serialPort.getOutputStream();

  output.write(...)

  ...

  }catch(PortInUseException ex)

  { ... }

  通过CommPortIdentifier的open方法可以返回一个CommPort对象。open方法有两个参数,第一个是String,通常设置为你的应用程序的名字。第二个参数是时间,即开启端口超时的毫秒数。当端口被另外的应用程序占用时,将抛出PortInUseException异常。

  在这里CommPortIdentifier类和CommPort类有什么区别呢?其实它们两者是一一对应的关系。CommPortIdentifier主要负责端口的初始化和开启,以及管理它们的占有权。而CommPort则是跟实际的输入和输出功能有关的。通过CommPort的getInputStream()可以取得端口的输入流,它是java.io.InputStream接口的一个实例。我们可以用标准的InputStream的操作接口来读取流中的数据,就像通过FileInputSteam读取文件的内容一样。相应的,CommPort的getOutputStream可以获得端口的输出流,这样就可以往串口输出数据了。

精彩图集

赞助商链接