VB.netでSocketクラスを使用しての切断検出を行うには?


.net初心者  2004-06-15 18:32:33  No: 84034

お世話になります。
VB.netでのソケットクラスを使用しての通信で質問です。

送信用のソケット(sndSocket)と受信用のソケット(rcvSocket)を作成し、
送信用ソケットは接続先にConnectしに、受信用ソケットはListenして
接続先からの接続を待つ作りです。

両ソケット接続後は、タイマーでrcvSocket.Availableを監視し、
データがあれば受信し処理を行います。
送信するときは、sndSocket.Sendにて行っています。
ここで質問なのですが、受信側の回線切断の検出はどのようにすればわかるのでしょうか?

送信側は、切断されている状態でSendを行うと、SocketExceptionがスローされるので
そこで判断するのかなー?と思うのですが、受信側は切断されていても.Availableは
0(データなし)でSocketExceptionはスローされないので、切断されているのかデータが
ないだけなのかがわかりません。

上記のケースにて、受信側ソケットの切断を検出できる方法を教えてください。
あ、あとBeginReceiveやBeginSend等の非同期通信は使用しません。
BeginReceiveだと、コールバック関数にて0バイト受信した場合が回線切断、みたいな
事を見たような気はしますが・・・

以上、よろしくお願いします。


Kross  2005-08-09 01:31:13  No: 84035

長いことこの質問の答えがわからなくて、今日やっと答えがわかったので
自分のメモを兼ねて、1年以上越しのレスですが答えを書いておきます。

If rcvSocket.Poll(1000, Sockets.SelectMode.SelectRead) = True Then

    '受信ソケットが閉じられたときの処理

End If

お役に立てて頂ければ幸いです。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加