问题如下:
有一个本地文件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 : 用来传递文件数据的sockvoid 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写的代码。
有一个本地文件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 : 用来传递文件数据的sockvoid 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写的代码。
{
int num, off = 0, left = len; while (1) {
num = write(sock_fd, data + off, left);
if (num < 0) {
if (errno == EINTR)
continue;
return num;
}
if (num < left) {
left -= num;
off += num;
continue;
}
return len;
}
}
用这个传的函数试试
{
int num, off = 0, left = len; while (1) {
num = write(sock_fd, data + off, left);
if (num < 0) {
if (errno == EINTR)
continue;
return num;
}
if (num < left) {
left -= num;
off += num;
continue;
}
return len;
}
}