图像文件连续发送的问题

zs99241 2007-07-08 02:27:09
客户端如下:
TMemoryStream *pms=new TMemoryStream();
int i=0;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormShow(TObject *Sender)
{
ClientSocket1->Address = "127.0.0.1";
ClientSocket1->Port = 3000;
ClientSocket1->Open();
Form1->Caption = "Client 已连接服务器";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
Graphics::TBitmap *Bmp = new Graphics::TBitmap;
TJPEGImage *jpg = new TJPEGImage();
Bmp->LoadFromFile("d:\\test1.bmp");
Image1->Picture->Bitmap->Assign(Bmp);
jpg->Assign(Bmp);
jpg->CompressionQuality=20;
jpg->Compress();
jpg->SaveToStream(pms);
String StrSize;
StrSize = (String) pms->Size;
ClientSocket1->Socket->SendText(StrSize);
jpg->Free();
Bmp->Free();

}
//---------------------------------------------------------------------------
void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
TCustomWinSocket *Socket)
{
String StrRec;
StrRec = Socket->ReceiveText();
if (StrRec=="read")
{
pms->Position = 0;
Socket->SendStream(pms);
}
if (StrRec=="end" && i==0)
{
i++;
pms->Clear(); //执行到这句出错,各位指点下是什么问题
Button2->Click();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Graphics::TBitmap *Bmp = new Graphics::TBitmap;
TJPEGImage *jpg = new TJPEGImage();
Bmp->LoadFromFile("d:\\test2.bmp");
Image1->Picture->Bitmap->Assign(Bmp);
jpg->Assign(Bmp);
jpg->CompressionQuality=20;
jpg->Compress();
pms->Clear();
jpg->SaveToStream(pms);
String StrSize;
StrSize = (String) pms->Size;
ClientSocket1->Socket->SendText(StrSize);
jpg->Free();
Bmp->Free();
}
//---------------------------------------------------------------------------

服务器端:
TMemoryStream *tmpMem=new TMemoryStream();
if (LngSize==0)
{
LngSize = StrToInt(String( Socket->ReceiveText()));
Label1->Caption = "大小:"+IntToStr(LngSize);
Socket->SendText("read");
}
else
{
int IntRecLen;
TJPEGImage *jpg = new TJPEGImage();

IntRecLen = Socket->ReceiveLength();
tmpMem->SetSize(IntRecLen);
IntRecLen = Socket->ReceiveBuf(tmpMem->Memory,IntRecLen );
tmpMem->Position=0;
pms->Position = pms->Size;
pms->CopyFrom(tmpMem,IntRecLen);
if (pms->Size>=LngSize)
{
pms->Position = 0;
jpg->LoadFromStream(pms);
Image1->Picture->Bitmap->Assign(jpg);
LngSize = 0;
jpg->Free();
Socket->SendText("end");
pms->Clear();
}
tmpMem->Free();
}
}

想实现连接发送两个图像文件,但每第二次再操作pms时就出错,请指点
...全文
178 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zs99241 2007-07-13
  • 打赏
  • 举报
回复
看来我是他乡遇故知了,连我问过谁都知道,哈……
csharpstudy 2007-07-09
  • 打赏
  • 举报
回复
自问自答...好..

问过僵哥的....哈哈
i_love_pc 2007-07-09
  • 打赏
  • 举报
回复
接分!!
laowang2 2007-07-09
  • 打赏
  • 举报
回复
jf
zs99241 2007-07-08
  • 打赏
  • 举报
回复
问题解决,Socket->SendStream(pms);发送完后,pms会自动被系统释放,所以再次操作pms就会出错

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧