0
我會盡量保持這個簡單。基本上,只要我打電話ls
從FTP命令提示符下,始終返回425,因爲在相關的觀察,如果在下面的代碼聲明:FTP服務器端口命令解析問題
這顯然是由於溢於行
sprintf(ip_decimal, "%d.%d.%d.%d", act_ip[0], act_ip[1], act_ip[2], act_ip[3]);
local_data_addr_act.sin_addr.s_addr=inet_addr(ip_decimal);
任何人都可以向我解釋爲什麼這條線將我的IP地址的所有值改爲255?
完整代碼如下。
else if(!strcmp(command,"PORT"))
{
int act_port[2];
int act_ip[4], port_dec;
char ip_decimal[40];
active=1;
sscanf(command, "PORT %d,%d,%d,%d,%d,%d",&act_ip[0],&act_ip[1],&act_ip[2],&act_ip[3], &act_port[0], &act_port[1]);
local_data_addr_act.sin_family=AF_INET;
sprintf(ip_decimal, "%d.%d.%d.%d", act_ip[0], act_ip[1], act_ip[2], act_ip[3]);
local_data_addr_act.sin_addr.s_addr=inet_addr(ip_decimal);
port_dec=act_port[0];
port_dec=port_dec<<8;
port_dec=port_dec+act_port[1];
local_data_addr_act.sin_port=htons(port_dec);
if (connect(s_data_act,(struct sockaddr*)&local_data_addr_act, (int)sizeof(struct sockaddr))!=0){
printf("%s%d\n",inet_ntoa(local_data_addr_act.sin_addr),ntohs(local_data_addr_act.sin_port));
sprintf(buf, "425\r\n");
send(sock2, buf, strlen(buf), 0);
close(s_data_act);
}
else{
sprintf(buf, "200\r\n");
send(sock2, buf, strlen(buf), 0);
}
}
但是,我不知道它爲什麼這樣做。我該怎麼辦才能解決這個問題?
服務器返回:
PORT 127,0,0,1,217,89
PORT
255.255.255.25535028
sock1和sock2是我的插座。
如果您需要更多信息,或者認爲錯誤在其他地方,請詢問,我會盡力爲您提供。
我理解127,0,0,1,217,89是否被你的代碼解析爲'255.255.255.2550'? –
@MartinPrikryl它實際上只有4 255個。我最近發現,作爲一個我不知道如何解決的問題。 – Jf2k
@MartinPrikryl只有前四個數字。 – Jf2k