用socket编写ftp client遇到的上传和下载问题
古董啊 2008-04-23 11:53:41 问题如下:
有一个本地文件x.rm(在winxp系统下查看属性,了解到它的原始大小21.0 MB (22,045,438 字节)),将它用自己写的程序testFTP上传到服务器,返回大小变为22045197bytes!然后下载完成后查看下载的文件大小为22118406bytes!改用flashfxp下载此文件,下载完后,查看文件大小与testFTP下载的大小一样都是22118406bytes!用kmplayer不能正常播放(注:testFtp及FlashFxp下载的文件和未上传的文件分处不同的目录)
删掉服务器上的x.rm,改用flashfxp上传x.rm,返回大小为(22045197 bytes),再用flashfxp下载此文件,实际下载下来的文件原始大小为21.0 MB (22,118,406 字节),也不能用播放器正常播放!
注:ftpserver使用的是
ProFTPD 1.2.10 Server (ProFTPD Default Installation)
SYST:215 UNIX Type: L8
我想,有这么几个原因:
这是怎么回事???那位高手给我解答一下?贴上我的上传和下载的函数:
/////////////////////////////////////////////////////////////////////////////
// 下载文件到服务器
// localfilename:下载下来的文件保存在本地的路径
// sock : 用来传递文件数据的sock
void download_file(char* localfilename,SOCKET sock)
{
FILE *fd;
char buff[4096];
buff[4095] = '\0';
int n_bytes = 0;
int n_recv = 0;
fd = fopen(localfilename, "w+b");
while (1)
{
n_recv = recv(sock, buff, 4094, 0);
n_bytes = fwrite(buff, sizeof(char), n_recv, fd);
if (n_recv == 0) {
break;
}
n_recv = 0;
memset(buff, 0x0, n_bytes);
}
fclose(fd);
closesocket(sock);
}
/////////////////////////////////////////////////////////////////////////////
// 上传文件到服务器
// localfilename:要上传的文件保存在本地的路径
// sock : 用来传递文件数据的sock
void upload_file(char* localfilename,SOCKET sock)
{
FILE *fd;
char buff[4096];
buff[4095] = '\0';
int n_bytes = 0;
int n_send = 0;
fd = fopen(localfilename, "rb");
while (!feof(fd)) {
n_bytes = fread(buff, sizeof(char), 4094, fd);
n_send = send(sock, buff, n_bytes, 0);
memset(buff, 0x0, n_send);
}
fclose(fd);
closesocket(sock);
}
我这样写是否有错??能告诉我怎样修改吗?最好能提供我一个winsock写的代码。