如何使用裸插座发送[SYN]?

时间:2013-12-10 00:17:32

标签: sockets ftp tcp-ip vxworks

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

1 个答案:

答案 0 :(得分:0)

  

为此,我需要发送一个请求:LIST并跟随[SYN]启动数据传输给我

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

  

char lst [6] =“LIST”;

问题出在这里。它应该是

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

所有FTP命令都由行终止符终止,行终止符定义为\r\n