C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: Socket通信について


(過去ログ 68 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■39349 / inTopicNo.1)  Socket通信について
  
□投稿者/ マ− (1回)-(2009/08/06(Thu) 10:18:31)

分類:[.NET 全般] 

Socket通信について、相手との接続エラー検出方法がわかりません。
正常切断時は、Recvにて0バイトが返ってくるため、判断できます。
また、回線切断時も同様にRecvでTry−Catchすることで、判断できました。
しかし、相手機器の電源断時には、Recvは全く反応しませんでした。
その他、Pollや、Send0バイトでも判断できませんでした。
よろしくお願いします。
引用返信 編集キー/
■39353 / inTopicNo.2)  Re[1]: Socket通信について
□投稿者/ オショウ (293回)-(2009/08/06(Thu) 11:31:49)
No39349 (マ− さん) に返信
> Socket通信について、相手との接続エラー検出方法がわかりません。
> 正常切断時は、Recvにて0バイトが返ってくるため、判断できます。
> また、回線切断時も同様にRecvでTry−Catchすることで、判断できました。
> しかし、相手機器の電源断時には、Recvは全く反応しませんでした。
> その他、Pollや、Send0バイトでも判断できませんでした。
> よろしくお願いします。

  受信するだけなら無理です。

  send0バイトって何?
  データ部がゼロバイトの送信パケットを送った?
  本当にパケット飛んだのでしょうか・・・

  パケットが出てれば、TCPの場合相手が受信不能な場合、必ずエラー
  します。ので判断できます。

※ UDPではないですよネ?!
  UDPは相手に到達しない場合、相手から能動的に受信完了のような
  応答パケット送信しない限り、解りません。

以上。
引用返信 編集キー/
■39355 / inTopicNo.3)  Re[1]: Socket通信について
□投稿者/ やじゅ (1174回)-(2009/08/06(Thu) 11:47:38)
やじゅ さんの Web サイト
No39349 (マ− さん) に返信
> Socket通信について、相手との接続エラー検出方法がわかりません。

>その他、Pollや、Send0バイトでも判断できませんでした。
と書かれているので、試されているのかもしれませんが・・・

Socketで相手側から切断を認識したい エンコードをUnicode
https://www.microsoft.com/japan/msdn/community/gdn/ShowPost-15468.htm

if(socket.Poll(1,SelectMode.SelectRead)) //1はCPU負荷を軽減するため
{
 if( 0 < socket.Available )
 {
 ...
 }
 else
 {
  //***接続が切れました***
  break;
 }
}

引用返信 編集キー/
■39368 / inTopicNo.4)  Re[2]: Socket通信について
□投稿者/ マー (1回)-(2009/08/06(Thu) 15:26:35)
No39355 (やじゅ さん) に返信
> ■No39349 (マ− さん) に返信
>>Socket通信について、相手との接続エラー検出方法がわかりません。
>
> >その他、Pollや、Send0バイトでも判断できませんでした。
> と書かれているので、試されているのかもしれませんが・・・
>
> Socketで相手側から切断を認識したい エンコードをUnicode
> https://www.microsoft.com/japan/msdn/community/gdn/ShowPost-15468.htm
>
> if(socket.Poll(1,SelectMode.SelectRead)) //1はCPU負荷を軽減するため
> {
>  if( 0 < socket.Available )
>  {
>  ...
>  }
>  else
>  {
>   //***接続が切れました***
>   break;
>  }
> }
>

上記のサンプルも試しましたが、切断信号受信時(FIN,RST)しか判断できませんでした。

引用返信 編集キー/
■39369 / inTopicNo.5)  Re[2]: Socket通信について
□投稿者/ マー (2回)-(2009/08/06(Thu) 15:29:54)
No39353 (オショウ さん) に返信
> ■No39349 (マ− さん) に返信
>>Socket通信について、相手との接続エラー検出方法がわかりません。
>>正常切断時は、Recvにて0バイトが返ってくるため、判断できます。
>>また、回線切断時も同様にRecvでTry−Catchすることで、判断できました。
>>しかし、相手機器の電源断時には、Recvは全く反応しませんでした。
>>その他、Pollや、Send0バイトでも判断できませんでした。
>>よろしくお願いします。
>
>   受信するだけなら無理です。
>
>   send0バイトって何?
>   データ部がゼロバイトの送信パケットを送った?
>   本当にパケット飛んだのでしょうか・・・
>
>   パケットが出てれば、TCPの場合相手が受信不能な場合、必ずエラー
>   します。ので判断できます。
>
> ※ UDPではないですよネ?!
>   UDPは相手に到達しない場合、相手から能動的に受信完了のような
>   応答パケット送信しない限り、解りません。
>
> 以上。

send0バイトは、パケットは飛びませんが、回線切断時にエラー検出できました。
おっしゃるとおり、パケットが出ていれば(1バイトでも送信していれば)、判断できます。

すいません、UDPではなく、TCPです。。。書いていませんでした。


引用返信 編集キー/
■39380 / inTopicNo.6)  Re[3]: Socket通信について
□投稿者/ オショウ (294回)-(2009/08/06(Thu) 18:38:46)
> send0バイトは、パケットは飛びませんが、回線切断時にエラー検出できました。
> おっしゃるとおり、パケットが出ていれば(1バイトでも送信していれば)、判断できます。
>
> すいません、UDPではなく、TCPです。。。書いていませんでした。

  先の1対1でハブはさんで・・・と言う場合、ハブの電源オフで
  自PCのネットワークがLinkDownするので、取れてしまいますネ!

  2台ハブ中継して、遠い方の1台の電源をオフにした場合、LinkUp
  したままで通信不能になるので、sendで見れるはず・・・

  間違った情報書いてすいませんでした・・・

※ これで一応、解決した?のでしょうか・・・

以上。
引用返信 編集キー/
■39395 / inTopicNo.7)  Re[4]: Socket通信について
□投稿者/ マー (3回)-(2009/08/07(Fri) 08:16:53)
No39380 (オショウ さん) に返信
>>send0バイトは、パケットは飛びませんが、回線切断時にエラー検出できました。
>>おっしゃるとおり、パケットが出ていれば(1バイトでも送信していれば)、判断できます。
>>
>>すいません、UDPではなく、TCPです。。。書いていませんでした。
>
>   先の1対1でハブはさんで・・・と言う場合、ハブの電源オフで
>   自PCのネットワークがLinkDownするので、取れてしまいますネ!
>
>   2台ハブ中継して、遠い方の1台の電源をオフにした場合、LinkUp
>   したままで通信不能になるので、sendで見れるはず・・・
>
>   間違った情報書いてすいませんでした・・・
>
> ※ これで一応、解決した?のでしょうか・・・
>
> 以上。

できればSendせずに検出したかったのですが、どうも手段がなさそうですね・・・
Pingを送るか、定期的に送受信を行うか、してみます・・・
とりあえず、解決済みにしておきます。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -