※ ChatGPTを利用し、要約された質問です(原文:Javaにてシリアル通信を行っております。)
Javaでシリアル通信を行い、着信番号を取得する方法とエラーの原因
このQ&Aのポイント
Javaにてシリアル通信を行い、着信番号を取得する方法とエラーの原因について説明します。
質問者は電話の着信番号を受信し、それに該当する会員情報をWEB画面に表示したいと考えています。
また、質問者はJavaのRXTXライブラリを使用してシリアル通信を行おうとしていますが、エラーが発生してしまっています。エラーの原因についても解説します。
やりたいことは、
電話がかかってきた際にアロハPC1(ナンバーディスプレイ)から
着信番号を受信して、
番号に該当する会員情報(DBから)をWEB画面に表示したいのです。
SerialDebugというソフトを使って、情報は取得できていると思います。
下記のような感じでいろいろ出てきます。
[TEXT] こ0ア3アイアイク090ア6ア5クキ00
[CHAR] _sp _sp 0 _sp 3 _sp _sp 0 _sp _sp 0 9 0 _sp 5 _sp 9 _sp _sp 5 5 _sp _sp _sp _sp _sp _sp _sp _sp _sp _sp
[DEC] 130 177 48 177 51 177 178 48 178 184 48 57 48 177 53 57 57 184 183 53 53 160 160 160 160 160 160 160 160 160 3
[HEX] 82 B1 30 B1 33 B1 B2 30 B2 B8 30 39 30 B1 35 B1 39 B8 B7 35 35 A0 A0 A0 A0 A0 A0 A0 A0 A0 03
この時点で、このわけの分からないデータ(信号?)をどうすれば着信番号になるのかさっぱりです。
[HEX]の " 30 39 30 B1 35 B1 39 B8 B7 35 35 "
から 09015198755
というテストに使っている携帯番号が取れるのが分かります。
(ここに書いてある番号は適当です。)
とりあえず、このデータはどういう風に解析して正確な着信番号にすればいいのでしょうか?
また、これをJavaのRXTXライブラリを使用して取得したいと考えていて、
下記、サンプルソースを真似して実行してみました。
http://www.javainthebox.net/JavaForFA/08-09CommAPI/No.08/samples/samples.zip
の中の./src/DumbTerminal.java
すると、イベント処理ルーチンのデータの読み込みのときにエラーが発生してしまいます。
java.io.IOException: Underlying input stream returned zero bytes
at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
at sun.nio.cs.StreamDecoder.read(Unknown Source)
at java.io.InputStreamReader.read(Unknown Source)
at java.io.BufferedReader.fill(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at SerialTest.serialEvent(SerialTest.java:67)
at gnu.io.RXTXPort.sendEvent(RXTXPort.java:732)
at gnu.io.RXTXPort.eventLoop(Native Method)
at gnu.io.RXTXPort$MonitorThread.run(RXTXPort.java:1575)
こんな感じです。
これは何が原因なのでしょうか?
少ない情報で申し訳ありませんが、
よろしくお願いいたします。
お礼
どうもありがとうございました。 大変参考になりました。