2013-12-10 19 views
0

我正在使用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消息 - 为什么我不想知道...?

+0

[SYN]的意思很不明确,通常意味着一个TCP syn,你不会自己发送,你把它留给TCP/IP栈 - connect()调用会为你做。请记住先登录到FTP服务器。 – nos

+0

@nos是的,我的意思是一个TCP同步和是的,我登录到我的服务器,但都通过首先连接到我的服务器,然后发送'USER:'和'PASS:'信息,然后发送'PASV'和'LST '我想从中获得回报,但是我根本没有在Wireshark上看到自动的[SYN] ... – cerr

+1

如果使用被动FTP,则需要设置一个新套接字,将其连接到端口用PASV命令回复给你。 LIST命令的结果将在新的套接字中返回给您,而不是在发送“LIST”命令的命令套接字上。 “全部手动”登录有什么意义? – nos

回答

0

对于我需要发送一个请求:LIST和下面的一个[SYN]其起始数据传送回给我

不,你不会。连接TCP套接字时会自动发送[SYN]。

char lst [6] =“LIST”;

问题在这里。它应该是

char[] lst = "LIST\r\n"; 

所有FTP命令由一个行结束,其被定义为\r\n终止。

+0

但我在列表 – cerr

+0

后面加上0x0d和0x0a,请参阅上面的**编辑** – cerr