【发布时间】:2014-05-10 21:22:13
【问题描述】:
我正在开发非常简单的 ftp 客户端。我已经创建了一个数据连接套接字,但是我无法成功传输文件:
FILE *f = fopen("got.png", "w");
int total = 0;
while (1){
memset(temp, 0, BUFFSIZE);
int got = recv(data, temp, sizeof(temp), 0);
fwrite(temp, 1, BUFFSIZE, f);
total += got;
if (total == 1568){
break;
}
}
fclose(f);
BUFFSIZE = 1568
我知道我的文件大小为 1568 字节,所以我尝试下载它只是为了测试。当我尝试下载 .xml 或 .html 文件时,一切都是文件,但当我尝试下载 png 或 avi 文件时,没有任何好处。原始文件大小为 1568,但 got.png 文件大小为 1573。我不知道是什么原因造成的。
编辑:
我已经修改了我的代码,所以现在它看起来像(它可以接受任何文件大小):
FILE *f = fopen("got.png", "w");
while (1){
char* temp = (char*)malloc(BUFFSIZE);
int got = recv(data, temp, BUFFSIZE, 0);
fwrite(temp, 1, got, f);
if (got == 0){
break;
}
}
fclose(f);
仍然收到的文件太长了 2 个字节。
【问题讨论】:
-
听起来像是文本/二进制 I/O 问题。您是否有机会在 Windows 上运行它?
-
在这种情况下,请尝试为二进制(而不是文本)I/O 打开文件。并确保读者也这样做。
-
太棒了!我知道这很简单,但你肯定挽救了我的一天。谢谢
标签: c file sockets ftp transfer