- 題名: NetworkStreamについて
- 日時: 2005/06/17 8:00:38
- ID: 11316
- この記事の返信元:
- (なし)
- この記事への返信:
- [11323] Re[1]: NetworkStreamについて2005/06/17 18:11:56
- ツリーを表示
■No11325に返信(ジャムさんの記事) > ご指摘の通り、クライアント側MemoryStream.Lengthが12086に対して、サーバ側 > MemoryStream.Lengthが12288となっており不要なデータが書き込まれていました。 > PCを2台使用してクライアントとサーバを実行した場合にはサーバ側 > のMemoryStream.Lengthの[5119]までにしかデータが書き込まれていない状態である > 事が分かりました。 データが増える方の理由は、深山さんが指摘したとおりでしょうね。修正方法 も深山さんが参照を提示されている、どぼん!さんのサンプルコードを読むと 分かりますよね。 データが減る方の理由は、NetworkStream.DataAvailable プロパティの使い方 にあるんじゃないでしょうか。どぼん!さんのサンプルコードでも、リファレ ンスにあるサンプルコードでも、ジャムさんと同様の使い方をしているわけで すが、DataAvailable プロパティでは受信すべきデータを全て受信したかどう かを判断できないのでしょう。 DataAvailable プロパティが示しているのは、内部的な受信バッファに読み取 り可能のデータがあるかどうかだけですよね。リモートホストからのデータの 到着が滞ると、DataAvailable プロパティは false を返しそうです。 素直にソケットのシャットダウンで送受信の終了を表現するか、もし、シャッ トダウンができない理由があるのなら、適当なプロトコルを考えるかするのが いいんじゃないでしょうか。
分類:[.NET]
お世話になってます。NetworkStreamについて質問させてください。
クライアント側でBitmapに画像を読込み、そのデータをMemoryStreamに保存し、NetworkStreamに書き込む。
サーバ側でNetworkStreamを読込み、MemoryStreamに保存し、Bitmapに書き込む。というのを作っています。
下記のプログラムで、ローカルホストでは正常に動作するのですが、サーバとクライアントに2台に分けて実行すると、
サーバ側の方にBitmap bmp = new Bitmap(m_stream);の部分で"一般的なGDI+の問題が発生しました"とエラーが出ます。
NetworkStream.Writeを数回に分けた方が良いのでしょうか?御指摘、お願いします。
クライアント側 *******************************************************
NetworkStream net_stream = tcp_client.GetStream();
MemoryStream m_stream = new MemoryStream();
Bitmap image = new Bitmap("../../image.bmp");
image.Save(m_stream, System.Drawing.Imaging.ImageFormat.Bmp);
byte[] buffer = m_stream.ToArray();
net_stream.Write(buffer, 0, buffer.Length);
net_stream.Flush();
サーバ側 ************************************************************
NetworkStream net_stream = tcp_client.GetStream();
MemoryStream m_stream = new MemoryStream();
byte[] buffer = new byte[1024];
do
{
net_stream.Read(buffer, 0, buffer.Length);
m_stream.Write(buffer, 0, buffer.Length);
m_stream.Flush();
}while(net_stream.DataAvailable);
Bitmap send_image = new Bitmap(m_stream);