FTP in C: 331 / 530 Please specify password
我在C语言中发送pass命令时遇到了一个问题,我正在编写一个简单的程序,该程序连接到一个ftp服务器并将列表打印到stdout。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | /* ----------- SET UP CONNECTION ---------*/ //creating socket if((sock=socket(AF_INET,SOCK_STREAM,0))<0) { perror("Main: Creating socket:"); return ERROR; } //Zero out addr memset(&addr, 0, sizeof(addr)); //Getting host name hPtr=gethostbyname(url.host); if(hPtr==NULL) { perror("Error while getting host name:"); return ERROR; } //Setting up addr for connect addr.sin_addr.s_addr = inet_addr(inet_ntoa(*((struct in_addr *)hPtr->h_addr_list[0]))); addr.sin_family = AF_INET; addr.sin_port = htons(url.port); if((connect(sock, (struct sockaddr *)&addr, sizeof(struct sockaddr))) < 0) { perror("Error: Connect socket :"); close(sock); return ERROR; } //Wait for Service ready bzero(buffer, MAXBUF); if(recv(sock, buffer, sizeof(buffer),0)<0) { perror("Error while receiving socket:"); } printf("%s", buffer); /* ----- LOGIN USER -----------*/ bzero(buffer, MAXBUF); //setup login strcpy(buffer,"USER"); strcat(buffer,url.user); strcat(buffer," "); //Send login if((send(sock,buffer,MAXBUF,0))<0) { perror("Error while sending socket:"); } //Receive answer if((recv(sock, buffer, sizeof(buffer),0))<0) { perror("Error while recieving socket:"); } printf("%s", buffer); //Send password bzero(buffer, MAXBUF); //setup password strcpy(buffer,"PASS"); strcat(buffer,url.pass); strcat(buffer," "); printf("%s",buffer); //Send password if((send(sock,buffer,MAXBUF,0))<0) { perror("Error while sending socket:"); } //Receive response if((recv(sock, buffer, sizeof(buffer),0))<0) { perror("Error while recieving socket:"); } printf("%s", buffer); close(sock); return OK; |
现在我成功地解析了launch参数中得到的地址。
我成功地连接了我想连接的地方:我取回了220。
发送后char*缓冲区[1024];其中包含:"用户匿名
"或"用户匿名"我得到ftp响应331请指定密码。
之后我尝试发送:"pass secret
"或"pass secret
"我得到530
用户名是匿名的,密码是机密的。我用ftp测试了它,我可以连接我发错通行证了吗?或者我的整个沟通都是错的?
好吧,问题就在这里。
我需要在明显的字节中输出准确的字节,所以我输入在SEND()呼叫中Strlen(缓冲器)并开始工作。该项目完全成功。谢谢你的帮助。
"Try sending strlen(缓冲器)instead of maxbuff characters.-杯17小时前
试着用「R」作为结尾,E.G.就像你在解释中写的一样,但不象你在你的代码里写的那样。