私はファイル転送プログラムを持っています。プログラム(クライアント)は、TCPソケット経由でビットマップを送信するための操作を以下のん:スクリーンショットを取得 - >ストリームに変換 - - メモリから>グラブビットマップは、私は、画像を転送することを選択した場合>パラメータが無効です - C#でTCP経由でビットマップを送信するとエラーが発生します
MemoryStream Fs = new MemoryStream();
//////////////11111
Bitmap bmp = TakeScreen();
///////////////2222
//Bitmap bmp = new Bitmap(@"C:\temp\001.bmp");
bmp.Save(Fs, ImageFormat.Bmp);
Byte[] buffer = Fs.ToArray();
Fs.Read(buffer, 0, buffer.Length);
TcpClient socket = new TcpClient("192.168.0.131", 1095);
NetworkStream nw = socket.GetStream();
nw.Write(buffer, 0, buffer.Length);
nw.Close();
Fs.Dispose();
socket.Close();
bmp.Dispose();
を送信しますメモリから直接 - エラーはありません。
ファイルから最初にビットマップをロードしようとすると、サーバー側で「パラメータが無効です」というエラーが発生します。ここ
は、サーバー側である:
NetworkStream Nw = new NetworkStream(handlerSocket.Client);
int thisRead = 0;
int Blocksize = 1024;
Byte[] dataByte = new Byte[Blocksize];
Bitmap screen = getScreen(Nw, dataByte, thisRead, Blocksize);
Nw.Close();
と
private Bitmap getScreen(NetworkStream Nw, Byte[] dataByte, int thisRead, int Blocksize)
{
Bitmap bitmap;
using (var strm = new MemoryStream())
{
while (true)
{
thisRead = Nw.Read(dataByte, 0, Blocksize);
strm.Write(dataByte, 0, thisRead);
if (thisRead == 0)
break;
}
bitmap = new Bitmap(strm); // Error here
}
Bitmap bm3 = new Bitmap(bitmap);
bitmap.Dispose();
return bm3;
}
このエラーの原因は何?私はそれがMemoryStreamと関係があると思います。
編集:あなたはgetScreen
でBitmap
を作成することができます前に、ストリームの先頭に求めることを旧姓質問
送信しているバイナリ情報のサイズを含めるには、TCP通信を実際に変更する必要があります。現在、サーバーは、ビットマップを作成しようとする前に、完全なビットマップ情報を持っていない可能性があります。たとえば、ビットマップ情報を送る前に、ビットマップのサイズを 'long'として送信します。そうすれば、サーバーは予想されるバイト数を知ることができます。 –