DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Socketクラス+非同期で、受信待ちでも切断を認識したい

環境/言語:[XPSP2、VBorC#,CLR2.0]
分類:[.NET]

こんにちは、うきょきょです。

Sockeクラスを利用して、非同期接続を行うサーバを作成する段階で、
詰まっているので、教えてください。

大抵はECHOを行うサンプルはよく見かけるのですが、
Connect→Receive→Send→Closeばかりで、
Connect→Receive→Send→Receive→Send→・・・→DisConnect
の様なサンプルが見あたりません。

唯一CodeZineにどぼんさんが投稿されているのが、受信時に切断されているか
チェックされていますが、現在想定しているクラス構造に合わないため、
悩んでいます。

想定しているのが、基本は非同期で送受信を行うが、
接続開始、送信開始をメソッドにして、
接続完了、受信完了、送信完了、切断完了はイベント発生に
させられないか?と言う物です。

各BeginXXXをコールした時の戻り値IAsyncResultの、
CompletedSynchronouslyか、IsCompletedを見て出来ないかと思って
いるのですが、期待通りにはできませんでした。

よろしくお願いします。

P.S.
セキュリティの関係で、ソースの掲載が出来ませんが、
出来る限り対応します。よろしくお願いします。

環境
WinXPSP2
C# 2005 Expres

参考
TCPを利用した複数クライアント接続可能なチャットアプリケーションの作成
http://codezine.jp/a/article.aspx?aid=22
非同期サーバー ソケットの例
http://msdn.microsoft.com/ja-jp/library/fx6588te(VS.80).aspx
TCPクライアント・サーバープログラムを作成する
http://dobon.net/vb/dotnet/internet/tcpclientserver.html
■No22159に返信(うきょきょさんの記事)
正直なところ、どこがお分かりにならないのかがよく分かりませんでしたので、とりあえずタイトルにある「受信待ちでも切断を認識する」方法についてご説明します。

受信中に切断されると、受信バイト数が0として返されます。非同期で受信しているときは、コールバックメソッドが呼び出され、受信バイト数が0となりますので、切断されたことが分かります。この点はCodeZineのサンプルでもお分かりいただけると思います。
返信ありがとうございます。

■No22160に返信(管理人さんの記事)
> ■No22159に返信(うきょきょさんの記事)
> 正直なところ、どこがお分かりにならないのかがよく分かりませんでしたので、とりあえずタイトルにある「受信待ちでも切断を認識する」方法についてご説明します。

一晩経って見直すと、確かにわかりづらいですね^^;
投稿した時に見直してはみたのですが・・・

> 受信中に切断されると、受信バイト数が0として返されます。非同期で受信しているときは、コールバックメソッドが呼び出され、受信バイト数が0となりますので、切断されたことが分かります。この点はCodeZineのサンプルでもお分かりいただけると思います。

やはりそれしか無いですか。BeginDisconnectが存在するので、これを使う物だと
思っていました。
CodeZineのサンプルでうまく調整してみます。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板