关于用Socket传输文件的问题

wsf 2004-01-13 03:10:43
我的源码:
void __fastcall TForm1::CSocketRead(TObject *Sender,
TCustomWinSocket *Socket)
{

1 Char buff[8192];
2 int revbytes=0;

3 memset(buff,0,sizeof(buff));


4 revbytes = Socket->ReceiveLength();
5 Socket->ReceiveBuf(buff,revbytes);

6 stream->Write(buff,revbytes); //TMemoryStream *stream;
7 //stream->Write((char *)Socket->Data,revbytes);//为什么不能这样写,必须用buff吗?

8 if (revbytes<8192)//这个判断是否有问题
9 {
10 stream->Position = 0;
11 stream->SaveToFile("d:\\a"); //
12 }

}

...全文
93 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wsf 2004-01-14
  • 打赏
  • 举报
回复
难道没有人能解答吗?
yesry 2004-01-14
  • 打赏
  • 举报
回复
你的代码断章取义。
wsf 2004-01-13
  • 打赏
  • 举报
回复
我的代码只是测试代码,有很多要完善的
我现在的问题是:我想把送过来的数据保存在stream中,对stream中的内容进行处理。不知道是全部收完再处理好呢还是收到一次处理一次好。
是不是把socket缓存扩大,效率就高呢?

Kallen 2004-01-13
  • 打赏
  • 举报
回复
你这段代码错误太多了,运行效率也低,
Socket->Data是一个空指针尚未分内存,如果要用必须先分配内存,记住:在关闭时要删除
如果要保存为文件,可以用TMemoryStream并做如下修改:只不过做为文件传输还要加更多代码
==============================================================
void __fastcall TForm1::CSocketRead(TObject *Sender,
TCustomWinSocket *Socket)
{
stream->Clear();
int revbytes=0;
revbytes = Socket->ReceiveLength();
stream->SetSize(recvbytes);
Socket->ReceiveBuf(stream->Memory,revbytes);
if (revbytes<8192)//这个判断是否有问题
{
stream->Position = 0;
stream->SaveToFile("d:\\a"); //
}
}

1,317

社区成员

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

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