初めて自分の家と他人の家が違う、と意識した時

C#で最近、ソケットプログラミングを勉強し始めました。

そこで、気になったのですが、
データを送信するときや、受信するときの方式に、
SENDやRECEIVEで送信する方法と
NETWORKSTREAMを使って送信する方法が
あることがわかりました。

この二つの方式のメリット、デメリット、また違いについて
ネットでいろいろと探してみたのですが、納得のいく
回答がなかなか得られずにいます。
よろしければ、ご教授していただけるとありがたいです。

A 回答 (1件)

MSのサイトには、


> NetworkStream は、ブロッキング モードのときに Stream ソケッ
>ト上でデータを送受信するためのメソッドを提供します。
と書いてありますから、ブロッキングモード専用なのでしょう。
ブロッキングモードでRECEIVEすると、データがなければデータがくるまで待つので、関数が戻ってきません。
よって、プログラムがそこで一旦停止することになります。
これを回避する方法として、
1。ブロッキングモードをつかわない
2。ブロッキングモードをつかうけれど、その部分を別スレッドにする
のどちらかでしょう。
別スレッドにする方法を、MSのサイトでは『非同期』と呼んでおり、その方法をNetWorkStreamクラスでのメッソッドでは提供しているのでしょう。
またクラスの継承を見ると、Stream系から継承していますから、
他のStream系と同様のI/Fで使えるのでしょう。

本気でソケットを勉強するなら、ブロッキングモードとかは基本的な事項ですから、SEND、RECEIVEから勉強するのもいいと思います^^;
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!