昨天搞了半天用TClientSocket和TServerSocket传文件怎么老是大小不一致呢?

sailorcgh 2003-10-26 03:23:44
谁做过吗?可以指教一下吗?谢谢了睡觉了..,...
...全文
52 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
gfh21cn 2003-10-27
  • 打赏
  • 举报
回复
先读出来,然后传递,最后写到文件中去

我是这样写的
FILE *tReadStream=fopen("","rb");

然后
传的时候,先传文件名,以及文件的大小

在接受方接收到文件名以后
char t_Buffer[MAX_LENGTH];
FILE *tWriteStream=fopen("","wb+");
long t_FileLength;

while(t_FileLength)
{
//循环接受
int t_ReciveLength=...
fwrite(t_Buffer,1,t_ReciveLength,tWriteStream);
t_FileLength-=t_ReciveLength;
}

Ri_syf 2003-10-27
  • 打赏
  • 举报
回复
来试试TMemoryStream对象,我使用它传输文件一切ok

TWinSocketStream *pStream = new TWinSocketStream(ClientSocket1->Socket,60000);
TMemoryStream *pms = new TMemoryStream();

发送文件:
try
{
memset(ReturnBuffer,0,sizeof(ReturnBuffer));
ReturnBuffer[0]=0x02;
//文件报头
ReturnBuffer[HEADSIZE+2]=0x7f;
//加载文件
pms->LoadFromFile(ReturnFullFileName);
//写文件名及传输文件大小
memset(ReturnBuffer+HEADSIZE+3,' ',FILENAME+FILESIZE);
memcpy(ReturnBuffer+HEADSIZE+3,ReturnFileName,strlen(ReturnFileName));
memcpy(ReturnBuffer+HEADSIZE+3+FILENAME,IntToStr(pms->Size).c_str(),strlen(IntToStr(pms->Size).c_str()));
pms->ReadBuffer(ReturnBuffer+HEADSIZE+3+FILENAME+FILESIZE,pms->Size);
ReturnBuffer[HEADSIZE+3+FILENAME+FILESIZE+pms->Size]='\0';
//传输数据
pStream->Write(ReturnBuffer,HEADSIZE+3+FILENAME+FILESIZE+pms->Size);
}


接收文件:
pms->Position = 0;
pms->WriteBuffer(buffer+报头字节,StrToInt(文件大小));
pms->SaveToFile(WriteFileName);

gdy119 2003-10-26
  • 打赏
  • 举报
回复
我建议你真要穿文件还是用别的控件
这两个控件总是出问题

1,317

社区成员

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

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