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

TCP/IP通信について

環境/言語:[vista]
分類:[.NET]

こんばんわ.
TCP/IP通信のサーバープログラムを作成中です.
そこで質問なのですが,

サーバーとクライアントが接続しており,クライアントが勝手に切断してしまった場合,サーバーがクライアントが切断した!と判断するイベントなどがあれば教えていただけますでしょうか.

よろしくお願いします.
■No23137に返信(akiさんの記事)
> サーバーとクライアントが接続しており,クライアントが勝手に切断してしまった場合,サーバーがクライアントが切断した!と判断するイベントなどがあれば教えていただけますでしょうか.

どのような方法を使っていらっしゃるのか分かりませんので何ともいえないのですが、通常は長さ0のデータを受信したときに切断されたと判断します。詳しくは、

TCPクライアント・サーバープログラムを作成する
http://dobon.net/vb/dotnet/internet/tcpclientserver.html

をご覧ください。
■No23143に返信(管理人さんの記事)
> どのような方法を使っていらっしゃるのか分かりませんので何ともいえないのですが、通常は長さ0のデータを受信したときに切断されたと判断します。詳しくは、
>
> TCPクライアント・サーバープログラムを作成する
> http://dobon.net/vb/dotnet/internet/tcpclientserver.html
>
> をご覧ください。

拝見させていただきました.ありがとうございます.
まず,現在私が作成している内容についてお話します.

TCP/IPの非同期通信を使用しております.
BackgroundWorker1_DoWorkイベントを使用し,非同期的にクライアントからの接続を受け入れるスレッドを作成しております.
それと,もう1つはmainスレッドです.
こちらでは,Do-Loopがずっとまわっています.
BackgroundWorker1_DoWorkでクライアントが接続したらフラグがTrueになり,
クライアントから読み取り可能なデータがあるかどうかを確認します.
あればサーバー側で受信します.基本的にクライアントからのデータはナシ=0となっています.
0の場合でも,接続しているということです.

管理人さんから教えて頂いた,
>通常は長さ0のデータを受信したときに切断されたと判断します。
は,使用できません.
ほかに,なにか方法がありましたら教えていただけますでしょうか.
よろしくお願いします.
> 管理人さんから教えて頂いた,
> >通常は長さ0のデータを受信したときに切断されたと判断します。
> は,使用できません.

申し訳ありませんが、おっしゃっている意味がよく分かりません。しかし勘違いをされているのではないかと思いますので、繰り返しになりますが、もう一度説明します。

どのような方法で受信されているのか分かりませんが、仮に

TCPクライアント・サーバープログラムを作成する
http://dobon.net/vb/dotnet/internet/tcpclientserver.html

で説明しているのと同じようにNetworkStreamのReadメソッドで受信していたとすると、Readメソッドが0を返したときにクライアントが切断したと判断します。それ以外の方法であっても、0バイトのデータを受信した(受信していないですが...)ときにクライアントが切断したと判断します。

MSDNにも書いてありますので、ご覧ください。

http://msdn.microsoft.com/ja-jp/library/system.net.sockets.networkstream.read.aspx

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