Последовательная связь Java PortInUseException

У меня есть приложение Java на основе SMS, использующее драйверы CommV3 для последовательной связи с модемом GSM. У меня есть два отдельных кода, один для отправки сообщений и один для получения сообщений. Каждый код отлично работает при индивидуальном выполнении.

Теперь, когда я хочу интегрировать оба этих кода, я получаю PortInUseException, что может быть очевидно. Но я не уверен, с чего начать.

Могу ли я получить указатели/ссылки/учебники, где я мог бы начать решать свою проблему. Я понятия не имею, с чего мне начать.

Заранее спасибо!


person GreenDroid    schedule 28.01.2013    source источник


Ответы (2)


Убедитесь, что ваш код использует один SerialPort, а не два. Тогда нет проблем с чтением или записью в этот порт.

SerialPort serialPort;
InputStream inStream;
OutputStream outStream;

serialPort = (SerialPort) portId.open(...);
serialPort.setFlowControlMode(...);
serialPort.setSerialPortParams(...);

inStream = serialPort.getInputStream ();
outStream = serialPort.getOutputStream ();

PS: SMSLib — отличная библиотека Java (также перенесенная на .NET Framework), которая позволяет отправлять/получать SMS-сообщения через совместимый модем GSM или телефон GSM. SMSLib также поддерживает некоторых операторов массовых SMS. Это бесплатно и очень стабильно.

person Costis Aivalis    schedule 28.01.2013
comment
Я не понимаю параметры portId.open(...). API говорит имя приложения и тайм-аут... Думаю, я посмотрю на эти строки. - person GreenDroid; 29.01.2013
comment
Есть два параметра: имя приложения и время ожидания в миллисекундах. Пример: portId.open("MySMSApp", 5000); - person Costis Aivalis; 29.01.2013
comment
Я уже использовал библиотеку Javax Comm и не решаюсь перейти на SMSLib. Однако, если ничего не поможет, я приму ваше предложение. Спасибо! - person GreenDroid; 29.01.2013
comment
Уверен, что ничего не подведёт. Тем не менее SMSLib предлагает много удобства. - person Costis Aivalis; 29.01.2013
comment
Спасибо за поддержку! Я обязательно посмотрю и на SMSLib. - person GreenDroid; 30.01.2013
comment
Я наконец-то понял. Я понимаю, что никогда не закрывал порт, чтобы другой код начал его использовать... serialPort.close() - person GreenDroid; 31.01.2013
comment
Если вы объедините свой код, вам нужно будет только один раз закрыть () в конце программы. - person Costis Aivalis; 31.01.2013

Вероятно, вы можете отделить код слушателя (который привязывается к порту) из двух кодов. и выделить соответствующий сегмент кода на основе отправки/получения.

person TheWhiteRabbit    schedule 28.01.2013
comment
Это именно то, что я не могу понять... Это мой первый опыт программирования с последовательной связью... - person GreenDroid; 29.01.2013