- PR -

TCP/IPのソケット、シリアル通信のCommunicationAPIで、断線(LAN線抜け等)をアプリで捉えられますか?

1
投稿者投稿内容
ビギナー
会議室デビュー日: 2004/09/29
投稿数: 10
投稿日時: 2004-09-30 19:29
ビギナーです。 今回も皆様のお知恵をお貸しください。

1.TCP/IPのsocket(client)使用時(available使用)に,
LAN線抜けやHUBの電源OFF等をアプリで捉えられますか?

2.シリアル通信用のJava Communication API 使用時に、
ケーブル抜けや相手機器の電源OFF等をアプリで捉えられますか?

よろしくお願いいたします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-10-01 00:28
自分でやってみましたか?
まずは手を動かしてみることをお勧めいたします。
そんなに時間のかかることではないですよね?

[ メッセージ編集済み 編集者: インギ 編集日時 2004-10-01 00:44 ]
ビギナー
会議室デビュー日: 2004/09/29
投稿数: 10
投稿日時: 2004-10-01 09:33
返信 -------------------------------------------------
インギ 様 2004-10-01 00:28より
手を動かしてみることをお勧めいたします。
------------------------------------------------------

インギ 様
ビギナーです。 いつも関心を払ってくださり、感謝いたします。
お勧めの通り、確認してみたのですが、うまく捉えられないので
投稿してみました。
コミュニケーションサーバ(以下、CSと記します)を介して、
シリアル通信とTCP/IPを利用しています。
テストパターンは幾つかありますが、結果は概ね以下のようなものです。
送信状態から、電源OFFまたは線を抜いた場合、
シリアル通信は、停止した状態となり、電源や接続が回復すると
正常に再開します。
TCP/IPは、LAN線の接続を回復させた場合は、正常に再開しますが、
電源やシリアルケーブルを復旧させた場合には、データ不正あるいは
停止状態(アプリ的には死んでおり、CTRL+Cで終了させる必要有り)
になります。

アプリで異常な状態を把握し、ユーザにメッセージを返し、アプリを
終了させたいのですが、いかがでしょうか?
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-10-01 15:52
>ビギナーです。 いつも関心を払ってくださり、感謝いたします。
いえいえ。お役に立てれば幸いです。さくっと素っ気ない書き込みで気を悪くしていたらごめんなさい。
質問上手になってほしいんです

まとめると以下の3つの質問になるという認識で良いでしょうか?

1)TCP/IP 接続では例外などが捕らえられない。断線状態はどうやって検出する?
->「正常に再開する」という言葉からは期待通りに動いているようなニュアンスを覚えますが、実際は例外などが発生して異常としてキャッチできるようにしたいわけですね?

2)シリアル通信で断線した場合データに不正が発生することがある
Java Communication API というのには明るくない(いや、全く知りません)のですが、おそらくシリアル通信ではデータの整合性を補正するような機構がないのではないでしょうか?
アプリケーションレベルでチェックディジットによる検証を行うなどする必要がありそうですね。

3)シリアル通信で断線した場合アプリケーションがフリーズ状態になることがある
フリーズ状態に陥った場合はスレッドダンプで原因を追及することができます。
スレッドダンプについての話題は以下のスレッドが参考になるでしょうか。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=11925&forum=12
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=10717&forum=12
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=14144&forum=12

質問の焦点が明らかになり、それがスレッドのタイトルと異なる内容であれば別スレッドを立てると解決も早く、後々読む人に役に立つかと思います。1,2についてはタイトルの通りですが3についてはちょっと異なりそうですね。
はまとみ
会議室デビュー日: 2004/10/06
投稿数: 3
投稿日時: 2004-10-06 19:38
シリアルに関してだけですが。
配線をクロスにします。
装置1 装置2 
DTR -> DSR
DSR -> DTR
にする事で、APIの中の、 isDSR で断線を知る事ができます。
イベントも立ちます。
ポートをオープンにすると自分のDTRがONに
なり、相手のDSRに伝わるという理屈です。
1

スキルアップ/キャリアアップ(JOB@IT)