我在学校接到一个任务,用C语言(针对Linux)编写一个FTP程序。我很快就可以使用所有基本功能(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() 部分(因为没有任何来自服务器的信息,我思考)。
我很感激任何建议!
发送文件后需要关闭套接字的写入端,以便接收方知道已到达文件末尾:
shutdown(client_fd, SHUT_WR);
(shutdown()
被用来代替close()
,以便了解对方是否成功收到整个文件)。
然后您的阅读端将看到文件结尾(read()
返回 0),此时应该close()
它的插座末端。然后服务器将看到文件结尾,并且它也可以关闭其套接字(并记录成功的传输)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)