四、 使用Java通讯API开发短信软件
和访问网络资源一样,和COM口通讯的第一步必须要打开某一个COM口。因此,我们首先需要一个可以操作COM口的类,我们叫它MySerial(这将是我们实现的第一个Java类)。
上面实现的类是我们的核心类,它的主要功能之一就是初始化COM口,并保证COM口可以正常使用。我们可以发现,在MySerial类中还调用了两个类:SerialBuffer和readSerial。下面就来实现这两个类。package com.message
import Java.io.*;
import Java.util.*;
import Javax.comm.*;
![]()
public class MySerial
...{
private String portName;
private CommPortIdentifier portId;
private SerialPort serialPort;
private OutputStream out;
private InputStream in;
![]()
SerialBuffer serialBuffer; // SerialBuffer类在后面实现
ReadSerial readSerial; // ReadSerial在后面实现
![]()
/**//*
这个方法是MySerial的构造函数,参数port表示COM口,1:COM1,2:COM2,
以此类推。在这个类中设置了COM口名:portName。portName必须是这种格式,因为getPortIdentifier方法要使用它
*/
public MySerial(int port)
...{
portName = "COM" + port;
}
![]()
/**//**
这个函数初始化了COM口,也就是我们所说的打开COM口,并得到用于和COM口通讯的输入、输出流。
*/
public int Initialize()
...{
private int success = 1;
private int fail = -1;
try ...{
// 根据portName得到COM的标识对象
portId = CommPortIdentifier.getPortIdentifier(portName);
![]()
try ...{
// 打开COM口, open方法的第二个参数是超时时间,单位是毫秒。
// 在本程序中超时时间是5秒
serialPort = (SerialPort)
portId.open("Serial_Communication", 5000);
}
catch (PortInUseException e)
...{
return fail;
}
![]()
// 下面是得到用于和COM口通讯的输入、输出流。
Try
...{
in = serialPort.getInputStream();
out = serialPort.getOutputStream();
}
catch (IOException e)
...{
return fail;
}
// 下面是初始化COM口的传输参数,如传输速率:9600等。
try ...{
serialPort.setSerialPortParams(9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
}
catch (UnsupportedCommOperationException e)
...{
return fail;
}
}
catch (NoSuchPortException e)
...{
return fail;
}
![]()
// 当上面的代码执行成功后,将建立一个数据缓冲区,然后启动
// 一个线程,用于接收从COM 口传回的数据
serialBuffer = new SerialBuffer();
readSerial = new ReadSerial(serialBuffer, in);
readSerial.start();
![]()
return success;
}
![]()
// 这个方法从COM口读出length个字符
public String readPort(int length) ...{
String msg;
msg = getMsg(Length);
return msg;
}
![]()
// 这个函数向COM口写入一个字符串
public void writePort(String msg) ...{
int c;
try ...{
for (int i = 0; i < msg.length(); i++) ...{
out.write(msg.charAt(i));
}
}
catch (IOException e) ...{}
}
![]()
// 关闭正在使用的COM口
public void closePort() ...{
readSerial.stop();
serialPort.close();
}
}
