通过C中的套接字发送文件

时间:2010-12-08 01:37:02

标签: c sockets

我在学校有一项任务是用C语言编写一个FTP程序(用于Linux)。我立即使用了所有基本功能(ls,cd),但我遇到了文件传输部分的麻烦。我使用sendfile通过套接字发送文件,如下所示:

int fd = open(temp, O_RDONLY);  
int rc = sendfile (client_fd, fd, &offset, statbuf.st_size);

我似乎无法弄清楚如何在客户端接收此文件。我尝试这样做调试:

while( (i = read(sock, message, MSG_LEN - 1)) > 0 ) {

    message[i] = '\0';
    printf("%s", message);
}

这在打印文本文件方面做得很好,但是如果我尝试发送二进制文件,例如,它只打印出二进制文件的开头并挂在read()部分(因为没有来自服务器,我想)。

我感谢任何建议!

1 个答案:

答案 0 :(得分:2)

您需要在发送文件后关闭套接字的写入端,以便接收方知道已到达文件的末尾:

shutdown(client_fd, SHUT_WR);

(使用shutdown()代替close(),以便您可以查看对方是否成功收到了整个文件。

然后您的阅读方将看到文件结束(read()返回0),此时它应该close()它的套接字结束。然后服务器将看到文件结束,它也可以关闭它的套接字(并记录成功的传输)。