Linux C编程-FTP服务器赢得';不能通过插座响应
因此,我尝试创建自己的FTP客户端,我能够连接到FTP服务器并获得“220”响应代码,但当我尝试发送任何命令时,recv功能就会被阻止。这是我的代码: 我尝试了多个免费的ftp服务器,我能够连接到所有这些服务器并获得220响应代码,但从那里我根本无法与它们通信Linux C编程-FTP服务器赢得';不能通过插座响应,c,linux,sockets,ftp,C,Linux,Sockets,Ftp,因此,我尝试创建自己的FTP客户端,我能够连接到FTP服务器并获得“220”响应代码,但当我尝试发送任何命令时,recv功能就会被阻止。这是我的代码: 我尝试了多个免费的ftp服务器,我能够连接到所有这些服务器并获得220响应代码,但从那里我根本无法与它们通信 #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #inc
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#define ERR(str) {printf("%s errno says: %s\n", str, strerror(errno));}
int getFTPcode(int sock){
char response[2550];
if(0 > recv(sock, response, 2550, 0)){
ERR("ftp response failed to recv");
return 0;
}
printf("%s\n", response);
while(1){
char msg[2000];
printf("Enter command:");
scanf("%s", msg);
if(0 > send(sock, msg, strlen(msg), 0)){
ERR("failed to send to server");
return 0;
}
if(0 > recv(sock, response, 2000, 0)){
ERR("failed to recv from server");
return 0;
}
printf("Response: %s\n", response);
}
printf("%s\n", response);
}
int connToOrig(char* ip, short port){
struct sockaddr_in addrin;
memset(&addrin, '0', sizeof(struct sockaddr_in));
addrin.sin_family = AF_INET;
addrin.sin_port = htons(port);
if(inet_pton(AF_INET, ip, &addrin.sin_addr) < 0){
ERR("inet_pton failed");
return 0;
}
int sock;
if(0 > (sock = socket(AF_INET, SOCK_STREAM, 0))){
ERR("socket() failed");
return 0;
}
if(connect(sock, (struct sockaddr*)&addrin, sizeof(addrin)) < 0){
ERR("connection to the origin server failed");
return 0;
}
printf("connection succesfull\n");
getFTPcode(sock);
return 1;
}
int main(int argc, char** argv){
connToOrig(argv[1], 21);
return 0;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#定义ERR(str){printf(“%s errno说:%s\n”,str,strerror(errno));}
int getFTPcode(int sock){
字符响应[2550];
如果(0>recv(sock,response,2550,0)){
错误(“ftp响应接收失败”);
返回0;
}
printf(“%s\n”,响应);
而(1){
char-msg[2000];
printf(“输入命令:”);
scanf(“%s”,msg);
如果(0>发送(sock、msg、strlen(msg)、0)){
错误(“发送到服务器失败”);
返回0;
}
如果(0>recv(sock,response,2000,0)){
错误(“无法从服务器接收”);
返回0;
}
printf(“响应:%s\n”,响应);
}
printf(“%s\n”,响应);
}
int connToOrig(字符*ip,短端口){
addrin中的结构sockaddr_;
memset(&addrin,'0',sizeof(struct sockaddr_in));
addrin.sin_family=AF_INET;
addrin.sin_port=htons(port);
if(内部地址(自动内部地址、ip地址和地址单地址)<0){
错误(“inet_pton失败”);
返回0;
}
int袜子;
if(0>(sock=socket(AF\u INET,sock\u STREAM,0))){
错误(“套接字()失败”);
返回0;
}
if(connect(sock,(struct sockaddr*)&addrin,sizeof(addrin))<0){
错误(“与源服务器的连接失败”);
返回0;
}
printf(“连接成功\n”);
getFTPcode(sock);
返回1;
}
int main(int argc,字符**argv){
connToOrig(argv[1],21);
返回0;
}
我开玩笑说,问题是我没有在发送到ftp服务器的消息中附加“\n”