【发布时间】:2014-05-22 05:21:26
【问题描述】:
void download(char *file)
{
int size = getsize(file);
printf("Got size %d\n", size);
sprintf(buff, "GET %s\n", file);
send(sockfd, buff, strlen(buff), 0);
rsize = recv(sockfd, buff, 1000, 0);
sscanf(buff, "%d", &resultcode);
printf("%s", buff);
if (strcmp(buff, "+OK\n") != 0)
{
printf("download failed\n");
}
FILE *dlfile = NULL;
if ((dlfile = fopen(file, "r")) != NULL)
{
dlfile = fopen(file, "w");
do
{
rsize = recv(sockfd, buff, 1000, 0);
for (int i = 0; i < rsize; i++)
{
fprintf(dlfile, "%c", buff[i]);
}
size = size - rsize;
} while (size != 0);
}
fclose(dlfile);
}
我正在尝试让下载功能打印出用户键入的文件内容,然后将其保存到他们的当前目录。我做了一个调试行printf("%s", buff);,它打印出+OK\n(filename)。它应该打印出+OK\n。它还会打印出download failed,然后是segmentation fault 错误。我错过了什么?
【问题讨论】:
-
您是否将
+OK\n(filename)与“+OK\n”进行比较?他们是不平等的。你在找strstr吗? -
当您阅读它时,您假设该套接字上的所有内容都是“OK\n”。我认为发件人在他们抛出响应后立即填充它。尽管世上一切美好,请检查您的函数调用返回值。。只有鲁莽的在Henry Spencer's Sixth Commandment for C Programmers的脸上吐口水
标签: c file sockets networking buffer