【发布时间】:2021-07-06 07:28:40
【问题描述】:
我有一个任务“发送文件到远程 FTP 服务器”。我已经编写了代码,但它无法正常工作。我创建了一个用于数据传输的套接字并尝试上传我的文件。上传文件后,我想使用recv()检查服务器答案,但我的程序此时挂起,但我可以在服务器上看到我的文件。如果我从代码中删除 recv(),我的文件大小为 0 字节。这几天我一直在尝试解决这个问题。谁能帮帮我?
我正在使用这个 FTP 服务器进行测试:ftp://speedtest.tele2.net/
int upload_file(char *filename) {
char str[256];
char buff[1024];
int getFile;
int bytes_read;
//ds - for data
sprintf(str, "CWD %s\r\n", "upload");
send(s, str, strlen(str), 0);
get_server_answer();
switch_to_passive_mode();
sprintf(str, "TYPE I\r\n");
send(s, str, strlen(str), 0);
get_server_answer();
sprintf(str, "STOR %s\r\n", filename);
send(s, str, strlen(str), 0);
get_server_answer();
getFile = open(filename, O_RDONLY, 0644);
while (1) {
bytes_read = read(getFile, buff, 1024);
if (bytes_read <= 0)
break;
send(ds, buff, bytes_read, 0);
}
char tmp[256];
recv(s, tmp, 256, MSG_WAITALL); // program hangs here
close(getFile);
close(ds);
close(s);
return 0;
}
【问题讨论】:
-
@SteffenUllrich 再仔细看看。大概是
switch_to_passive_mode()发送了一个PASV命令。并且正在使用套接字s发送命令,但正在使用不同的套接字ds发送文件数据 -
@RemyLebeau:你是对的。我完全错过了这些细节。感谢您纠正我。
标签: c sockets ftp network-programming recv