首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

FTP客户端PASV模式下建立数据连接出有关问题

2012-03-13 
FTP客户端PASV模式下建立数据连接出问题C/C++ code/*建立socket连接*/int ConnectTO(char *ip,unsigned sh

FTP客户端PASV模式下建立数据连接出问题

C/C++ code
/*建立socket连接*/int ConnectTO(char *ip,unsigned short port){    int sockftp;    sockftp = socket(AF_INET,SOCK_STREAM,0);    if(-1 == sockftp)    {        printf("socket ftp error\n");        return FAL;    }      /* unsigned long addrip;    addrip = inet_addr(ip);    if(-1 == addrip)    {        struct hostent *phostent = gethostbyname(serverip);        if(!phostent)            return FAL;        addrip =(*(struct in_addr*)phostent->h_addr).s_addr;    }*/        struct sockaddr_in serveraddr;     memset(&serveraddr,0,sizeof(struct sockaddr_in));    serveraddr.sin_family = AF_INET;    serveraddr.sin_port = htons ( port );    serveraddr.sin_addr.s_addr = inet_addr(ip);;    printf("Socket connected. Waiting for welcome message...\n");     if(connect(sockftp,(struct sockaddr *)&serveraddr,sizeof(serveraddr)) == -1 )//建立数据socket阻塞    {        printf("connect error\n");        close(sockftp);        return FAL;    }    if(ftpcmd(sockftp, NULL )!=220)    {        printf(" Can't read from control socket. Socket error = #10054.\n");        close(sockftp);        return FAL;    }        printf("Connected. Authenticating...\n");     return sockftp;}


小弟写ftp客户端,在PASV模式建立数据socket连接时发送阻塞,超时,求解决
1、PASV返回的IP以及端口都已经正确获取
2、用手动模式操作过,需要命令socket以及数据socket分开处理,无法串行处理
例如:
PASV
227 Entering Passive Mode (192,168,1,182,255,122)
Socket connected. Waiting for welcome message...
被挂在这里,一直到超时

[解决办法]
卡在connect那里了嘛,你确定获取的ip、port可以连接?
[解决办法]
使用的端口是 65402 ?

确定是阻塞在connect()吗?
[解决办法]
探讨
可以连接,手动测试过了

[解决办法]
if(ftpcmd(sockftp, NULL )!=220)
{
printf(" Can't read from control socket. Socket error = #10054.\n");
close(sockftp);
return FAL;
}

这一段是读取控制通道,还是数据通道??
[解决办法]
测试一下
[解决办法]
探讨

去掉ftpcmd也一样,ftpcmd里面是读写操作

热点排行