【发布时间】:2014-02-26 22:49:38
【问题描述】:
我需要帮助我的 ftp 客户端应用程序。我使用用户名和密码成功连接到服务器并发送 PASV 消息。我收到了 IP 和端口,但我不知道下一步该做什么。我知道我必须连接到 IP 和端口,但我不知道如何。
谁能给我一个如何连接和接收来自服务器的消息的代码示例?
【问题讨论】:
标签: c sockets tcp ftp passive-mode
我需要帮助我的 ftp 客户端应用程序。我使用用户名和密码成功连接到服务器并发送 PASV 消息。我收到了 IP 和端口,但我不知道下一步该做什么。我知道我必须连接到 IP 和端口,但我不知道如何。
谁能给我一个如何连接和接收来自服务器的消息的代码示例?
【问题讨论】:
标签: c sockets tcp ftp passive-mode
您已经拥有成功连接到服务器上端口 21 的代码,同样的代码也可以连接到 PASV 响应中返回的 IP 地址和端口号。
但是
在需要传输一些数据之前,您不希望进行第二次连接。您建立的第一个连接用于命令和对命令的响应。您与 PASV 返回的端口建立的连接是为了按照实际传输文件的命令传输数据,例如 RETR 或 LIST。
【讨论】:
bzero(&sout,sizeof(sout)); sout.sin_family = PF_INET; cout.sin_port = htons(newPort); sout.sin_addr.s_addr = inet_addr(newIP.c_str()); if((connect(mysocket,(struct sockaddr *)&sout,sizeof(sin))) < 0){ cerr << "Connection Error" << endl; return -1; }
PASV 响应。它没有具有标准化格式,并且各种 FTP 服务器使用了几种不同的格式,因此您必须确保处理所有这些格式(另一方面,EPSV 具有标准化的格式)。您也可以考虑忽略PASV IP,只使用与您的命令套接字连接的相同 IP。