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

TipsのTCPクライアント・サーバープログラムを作成について

環境/言語:[Win2000 Farmework1.1]
分類:[.NET]

いつも参考にさせていただいてます。
現在、サンプルにあるようなTCP/IPを使ってサーバー・クライアントのソフトを作成しています。
サンプルについて質問なのですが、受信の際以下のように記述されていますが
以下のようだとデータを受信しない限りReadメソッドでブロックされて先の処理に
進むことができずそこでとまってしまいます。

'クライアントから送られたデータを受信する
Dim ms As New System.IO.MemoryStream
Dim resBytes(256) As Byte
Dim resSize As Integer
Do
'データの一部を受信する
resSize = ns.Read(resBytes, 0, resBytes.Length)
'Readが0を返した時はクライアントが切断したと判断
If resSize = 0 Then
Console.WriteLine("クライアントが切断しました。")
Console.ReadLine()
Return
End If
'受信したデータを蓄積する
ms.Write(resBytes, 0, resSize)
Loop While ns.DataAvailable

また、Readメソッドでブロックされるのを防ぐために、DataAvailableプロパティ
を確認してTrueだったらReadするようにするとクライアントが切断したという確認が
できなくなり困っています。

Do
      if ns.DataAvailable then
'データの一部を受信する
resSize = ns.Read(resBytes, 0, resBytes.Length)
'Readが0を返した時はクライアントが切断したと判断
If resSize = 0 Then
Console.WriteLine("クライアントが切断しました。")
Console.ReadLine()
Return
End If
'受信したデータを蓄積する
ms.Write(resBytes, 0, resSize)
End if
Loop

Readメソッドでブロックされることなく、クライアントからの切断も認識できるように
する方法はないのでしょうか?
BeginReadメソッドを使うか、新しいスレッドを作成するか(BeginReadメソッドもそうですが)ということになると思います。
■No4510に返信(管理人さんの記事)
> BeginReadメソッドを使うか、新しいスレッドを作成するか(BeginReadメソッドもそうですが)ということになると思います。
ありがとうございます。早速調べてプログラムの方を作成してみたいと思います。
また、分からないことがありましたら質問しますのでよろしくお願い致します。
解決済み!

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