お世話になります。
VB.netでのソケットクラスを使用しての通信で質問です。
送信用のソケット(sndSocket)と受信用のソケット(rcvSocket)を作成し、
送信用ソケットは接続先にConnectしに、受信用ソケットはListenして
接続先からの接続を待つ作りです。
両ソケット接続後は、タイマーでrcvSocket.Availableを監視し、
データがあれば受信し処理を行います。
送信するときは、sndSocket.Sendにて行っています。
ここで質問なのですが、受信側の回線切断の検出はどのようにすればわかるのでしょうか?
送信側は、切断されている状態でSendを行うと、SocketExceptionがスローされるので
そこで判断するのかなー?と思うのですが、受信側は切断されていても.Availableは
0(データなし)でSocketExceptionはスローされないので、切断されているのかデータが
ないだけなのかがわかりません。
上記のケースにて、受信側ソケットの切断を検出できる方法を教えてください。
あ、あとBeginReceiveやBeginSend等の非同期通信は使用しません。
BeginReceiveだと、コールバック関数にて0バイト受信した場合が回線切断、みたいな
事を見たような気はしますが・・・
以上、よろしくお願いします。
長いことこの質問の答えがわからなくて、今日やっと答えがわかったので
自分のメモを兼ねて、1年以上越しのレスですが答えを書いておきます。
If rcvSocket.Poll(1000, Sockets.SelectMode.SelectRead) = True Then
'受信ソケットが閉じられたときの処理
End If
お役に立てて頂ければ幸いです。
ツイート | ![]() |