我正在使用VxWorks上的套接字编写一个裸骨ftp客户端,我现在想要接收目录内容。 为此,我需要发送一个Request: LIST
和一个[SYN]
,它将数据传输发回给我,但我想知道我是如何使用简单套接字来做到这一点的? 我的代码发送LIST
看起来就像这样:如何使用裸露套接字发送[SYN]?
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`启动服务器没有响应连接。
编辑
在建议,我取代0X0D和0X0A的addtion在我的字符串与结束\ r \ n直接顶部从而改变我的代码串:
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
消息 - 为什么我不想知道...?
[SYN]的意思很不明确,通常意味着一个TCP syn,你不会自己发送,你把它留给TCP/IP栈 - connect()调用会为你做。请记住先登录到FTP服务器。 – nos
@nos是的,我的意思是一个TCP同步和是的,我登录到我的服务器,但都通过首先连接到我的服务器,然后发送'USER:'和'PASS:'信息,然后发送'PASV'和'LST '我想从中获得回报,但是我根本没有在Wireshark上看到自动的[SYN] ... – cerr
如果使用被动FTP,则需要设置一个新套接字,将其连接到端口用PASV命令回复给你。 LIST命令的结果将在新的套接字中返回给您,而不是在发送“LIST”命令的命令套接字上。 “全部手动”登录有什么意义? – nos