Пытаюсь соединиться с АТС Alcatel S12 через Serial-порт из Java приложения. Для проброса Serial-порта через Internet используется ПО компании MOXA (NPort Management Suite 3.5), создающее виртуальный COM-порт на клиентской стороне. Для работы с Serial-портом из Java SE использую
RXTX.
Проблема в следующем:
1. MOXA использует для передачи данных два TCP соединения: управляющее (966 порт) и поток данных (950 порт)
2. RXTX использует следующий код для открытия COM-порта (можно ли открыть порт как-то по другому, не знаю):
void connect ( String portName ) throws Exception
{
CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName);
if ( portIdentifier.isCurrentlyOwned() )
{
System.out.println("Error: Port is currently in use");
}
else
{
CommPort commPort = portIdentifier.open(this.getClass().getName(),2000);
if ( commPort instanceof SerialPort )
{
SerialPort serialPort = (SerialPort) commPort;
serialPort.setSerialPortParams(57600, SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
InputStream in = serialPort.getInputStream();
OutputStream out = serialPort.getOutputStream();
(new Thread(new SerialReader(in))).start();
(new Thread(new SerialWriter(out))).start();
}
else
{
System.out.println("Error: Only serial ports are handled by this example.");
}
}
}
3. При выполнении getPortIdentifier, RXTX зачем-то открывает Serial-порт и затем закрывает его. Вызов open пытается открыть порт повторно.
4. ПО MOXA закрывает поток данных (950 порт), при закрытии Serial-порта, и не открывает его при последующем open, вследствие чего, работать с Serial-портом, после этого, невозможно.
Если кто-то сталкивался с этой проблемой, прошу помощи. Интересуют следующие варианты:
1. Возможные пути обхода проблемы, с использованием RXTX (возможно с небольшими правками ее Java-кода, но без исправления dll)
2. Библиотеки Java для работы с Serial-портом, отличные от RXTX
Вариант самостоятельной разработки библиотеки, с использованием JNDI, под Windows, рассматривается, но оценивается как чрезмерно трудоемкий.