我正在使用 VxWorks 上的套接字编写一个裸骨ftp客户端,我现在想要接收目录内容。
为此,我需要发送Request: LIST
并跟随[SYN]
启动数据传输给我,但我想知道我是如何用简单的套接字执行此操作的?
我发送LIST
的代码看起来像这样:
char lst[6] = "LIST";
lst[4] = 0x0d; // add empty characters on back
lst[5] = 0x0a;
if (write (sFd, (char *) &lst, 6) == ERROR)
{
perror ("write");
close (sFd);
return ERROR;
}
if (read (sFd, replyBuf, REPLY_MSG_SIZE) < 0) {
perror ("read");
close (sFd);
return ERROR;
}
printf ("MESSAGE FROM SERVER:\n%s\n", replyBuf);
但它实际上卡在read()中,直到它超时,因为服务器没有响应,除非我发送'SYNC`来启动连接。
修改
根据建议,我用 \ r \ n 替换了我的字符串末尾的0x0d和0x0a的添加,直接将我的代码更改为的字符串:
char lst[6] = "LIST\r\n";
if (write (sFd, (char *) &lst, strlen(lst)) == ERROR)
{
perror ("write");
close (sFd);
return ERROR;
}
if (read (sFd, replyBuf, REPLY_MSG_SIZE) < 0) {
perror ("read");
close (sFd);
return ERROR;
}
printf ("MESSAGE FROM SERVER:\n%s\n", replyBuf);
但是我得到了完全相同的结果,我的客户端没有发送SYNC
消息 - 为什么我不知道......?
答案 0 :(得分:0)
为此,我需要发送一个请求:LIST并跟随[SYN]启动数据传输给我
不,不。连接TCP套接字时会自动发送[SYN]。
char lst [6] =“LIST”;
问题出在这里。它应该是
char[] lst = "LIST\r\n";
所有FTP命令都由行终止符终止,行终止符定义为\r\n
。