【发布时间】:2023-04-03 03:15:01
【问题描述】:
我正在尝试实现一个基本的 ftp 服务器。
我知道数据通道是由 PASV 命令创建的,并且它创建了一个新的套接字,用于发送文件等数据。
我开始执行命令 LIST,但我不明白为什么要在传输完成后关闭我的数据套接字。我用于测试的 ftp 客户端在收到代码 226 时关闭他与我的数据套接字的连接。
这意味着客户端应该在每个需要数据通道的命令之前执行PASV 吗?
我的代码现在看起来像这样:
int list(char **arg, int c_sock, t_data *data)
{
FILE *fp;
char path[1035];
write_to_client(c_sock, "150 ", "sending data...\r\n");
fp = popen("/bin/ls /home/login -l", "r");
if (fp == NULL)
{
printf("Failed to run command\n");
exit(1);
}
while (fgets(path, sizeof(path)-1, fp) != NULL)
{
write_to_client(data->data_sock, path, "\0");
}
pclose(fp);
write_to_client(c_sock, "226 ", "data send\r\n");
close(data->data_sock);
return (0);
}
【问题讨论】: