关于 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;
}
...全文
844 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenyunkang123 2013-12-21
  • 打赏
  • 举报
回复
if (!ServerSocket1->Socket->Connections[0]->SendStream(ImageStream) )
zdrone 2013-10-30
  • 打赏
  • 举报
回复
用sleep等待一段时间再clear试试呢?
phder 2013-10-27
  • 打赏
  • 举报
回复
不行,运行这句就一直等待
我不懂电脑 2013-10-25
  • 打赏
  • 举报
回复
//tmpStream-> Clear(); //运行这句就出错,不知为什么? 用阻塞方式发送,异步方法很可能流还在占用
phder 2013-10-25
  • 打赏
  • 举报
回复
自己顶起来,有点急

1,316

社区成员

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

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