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;
}
这一段是读取控制通道,还是数据通道??
[解决办法]
测试一下
[解决办法]