したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | メール | |

VB2005のSocket通信の複数クライアントの非同期処理

1まもる:2011/06/02(木) 09:56:43
VB2005のSocket通信の複数クライアントの非同期処理について
このサイトで勉強さてて頂いております。

ソケットの切断検知について、壁に当たってしまい
ご教示して頂けたらと思い、書込み致しました。

サーバ側のLANコネクタ切断時は検知できますが
クライアント側のLANコネクタ切断の検知できず、困っております。

netstatを使ってポートの状態を確認してみますと
ポートが占有されたままになってるように思います。

接続してから一定時間経過したら
切断させるように出来れば…等
色々考えてみましたが
私の能力不足で解決策が見当たりませんでした。

なにか切断を検知する方法がありますでしょうか?

お忙しいとは思いますが、宜しくお願いします。

2igoten:2011/06/02(木) 11:09:56
非同期の場合物理的なSocketの切断を判別するのは
難しいですね。
pingはネットワークの物理的な接続テストにも使われますので
pingを飛ばす方法が良いと思います。

3まもる:2011/06/02(木) 16:14:19
お忙しい中、回答ありがとうございます。

色々調べていたのですが
私の知識不足でpingという考えが出てきませんでした。

ご教示通りに、Pingを組み込んでみたところ
ステータスでTimeOutを検知できるようになりました。

タイムアウト検知できるようになりましたので
残った通信をしているスレッドを破棄しようと考えているのですが
(通信を行っているスレッド=コードの構成にあります図の「クライアントクラス毎の別スレッド上のRead」だと考えています)
ここでまた壁に当たってしまいました。

メインフォームからタイムアウトを検知したスレッドを破棄する方法が分かりません…。
ご教示頂いてから、色々手立てを考え、調べてみたのですが悪戦苦闘しております。

連続で大変恐縮なのですが
通信を行っているスレッドの破棄する方法をご教示して頂けませんでしょうか?

4igoten:2011/06/02(木) 18:56:40
ServerListen()の中の catch (Exception ex)の
切断処理と同じ処理を行えばいいと思います。

5まもる:2011/06/03(金) 09:40:48
ご返答、ありがとうございます。

ご教示通り、切断処理を行おうと思ったのですが
ServerListen() の Catch ex As Exception はデリゲートでメインフォームに対してエラーを書き込んでるように見受けられます。
ServerStart() の Catch ex As Exception の方かな?と思いましたので、調べてみましたが
Listener.[Stop]()を行いますと、コードの構成にあります図の、"別スレッド上のListen"が停止されてしまい
その子供の接続中の全ての通信が終了してしまいますので、こちらでも無いようです。
"別スレッド上のListen"は破棄しないで
通信を行っていると思います子供の"クライアントクラス毎の別スレッド上のRead"のみを停止できないでしょうか?

質問が連続しまして、真に申し訳ありませんが
宜しくお願いします。


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板