关于 socket 发送流的问题
phder 2013-10-25 10:24:15 通过流发送一个图片,使用TserverSocket和TClientSocket,接收端read事件不触发,请诸位指点一下
发送:
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
TMemoryStream *tmpStream=new TMemoryStream();
Graphics::TBitmap *Bitmap1 = new Graphics::TBitmap();
Image2->Canvas->Pen->Color=clBlack;
Image2->Canvas->FillRect(TRect(20,20,40,40));
Bitmap1->Assign(Image2->Picture->Bitmap);
Bitmap1->SaveToStream(tmpStream);
tmpStream->Position=0;
s=ClientSocket1->Socket->SendStream(tmpStream); //发送图象
//tmpStream-> Clear(); //运行这句就出错,不知为什么?
}
delete Bitmap1;
//delete tmpStream; //运行这句就出错,不知为什么?
}
接收:
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
int LenRcv=Socket->ReceiveLength();
unsigned char Buf[65536];
ZeroMemory(Buf,65536);
Graphics::TBitmap *Bitmap1 = new Graphics::TBitmap();
TMemoryStream *tmpStream=new TMemoryStream();
Socket->ReceiveBuf(Buf,LenRcv); //接收数据包并读入缓冲区内
tmpStream-> Write(Buf,LenRcv); //加入流M中
Bitmap1-> LoadFromStream(tmpStream); //将流M中的数据读至JPG图像对象J中
Image1-> Picture-> Bitmap-> Assign(Bitmap1); //分配给image1
delete Bitmap1;
}