EDITED
我正在制作一个C ++程序,用于连接我学校的FTP服务器,并允许我从我的帐户中获取文件。没有什么可复杂的,但我继续遇到530返回代码。我首先在端口21(FTP命令端口)上建立套接字并发送USER xxxxx
然后我得到一个220代码响应,说我已连接到111.111.111,接下来我将发送用户命令PASS xxxxx
,但密码未被接受,我收到331代码
以下是运行以下代码的终端:
>./FTP
FTP: USER xxxxx
FTP: 220 csci2.stcloudstate.edu FTP server ready.
FTP: PASS xxxxx
FTP: 331 Password required for xxxxx.
ready.
FTP: PASS xxxxx
FTP: 530 Please login with USER and PASS.
ready.
>
我想我的命令没有正确的格式,所以下面是代码如果有人看到我的用户/密码输入错误的地方。
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <iostream>
using namespace std;
int main(void)
{
//variables
struct sockaddr_in stSockAddr;
int Res;
char buff[60];
char UserFeed[30];
int SocketFD = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
string FTPread;
string FtpCommand;
...
memset(&stSockAddr, 0, sizeof(stSockAddr));
stSockAddr.sin_family = AF_INET;
stSockAddr.sin_port = htons(21);
...
//Enter USER xxxxxx
cout<<"FTP: ";
fgets(UserFeed,30,stdin);
write(SocketFD, UserFeed, strnln(UserFeed));
recv(SocketFD,buff,sizeof(buff),0);
cout<<"FTP: "<<buff;
//Enter PASS xxxxxxxx
cout<<"FTP: ";
fgets(UserFeed,30,stdin);
write(SocketFD, UserFeed, strnln(UserFeed));
recv(SocketFD,buff,sizeof(buff),0);
cout<<"FTP: "<<buff;
...
}
*注意:这是使用berkeley套接字,FTP将是被动模式(因此还没有数据连接),并且这是从与FTP服务器相同的网络上的solaris系统编码/编译/运行。