荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: sh.bbs@bbs.sjtu.edu.cn (与饮水思源共进退!), 信区: Linux
标 题: Re: 求问一下ftp下载的编程问题
发信站: 饮水思源 (Sat Apr 9 01:20:52 2005)
转信站: SZU!news.szu.edu.cn!bbsnews.sdu.edu.cn!SJTU
da.sin_family = AF_INET;
da.sin_addr.s_addr = myaddr.addr;
/* da.sin_addr.s_addr = INADDR_ANY;
*/
da.sin_port = 0;
if ((sock_data = socket (AF_INET, SOCK_STREAM, 0)) < 0)
{
perror ("socket error");
return (-1);
}
len = sizeof (da);
if ((bind (sock_data, (struct sockaddr *) &da, len)) < 0)
{
perror ("bind error");
return (-1);
}
if (getsockname (sock_data, (struct sockaddr *) &da, &len) < 0)
{
perror ("getsockname failed");
return (-1);
}
port = ntohs (da.sin_port);
if (listen (sock_data, 5) < 0)
{
perror ("listen failed");
return (-1);
}
sprintf (cmd, "PORT %u,%u,%u,%u,%u,%u\r\n",
(unsigned char) myaddr.bytes[0],
(unsigned char) myaddr.bytes[1],
(unsigned char) myaddr.bytes[2],
(unsigned char) myaddr.bytes[3], port / 256,
port - (unsigned int) (port / 256) * 256);
fcmd ();
check_code ("200");
sprintf (cmd, "LIST -l\r\n");
fcmd ();
check_code ("150"); /*150 Opening ASCII mode data connection for fil
e list */
FD_ZERO (&rset);
FD_SET (sock_data, &rset);
status = select (sock_data + 1, &rset, NULL, NULL, &tval);
if (status == -1)
{
perror ("select error in list!");
return (-1);
}
if (status)
{
len = sizeof (da);
if ((ns = accept (sock_data, (struct sockaddr *) &da, &len)) < 0)
{
perror ("accpet error timeout");
return (-1);
}
}
close (sock_data);
到这里,从ns里就可以读到list的数据了
【 在 heack (情归齐鲁) 的大作中提到: 】
: 老大,能不能现在就传给我/
: 感激不尽!
: 【 在 sh (与饮水思源共进退!) 的大作中提到: 】
: : 明天给你贴段代码看看
: : 以port模式运作的的data line
--
欢迎访问Fishnet FTP搜索引擎
校内文件资源搜索的最佳选择~
http://search.univs.cn/sjtu
※ 来源:·饮水思源 bbs.sjtu.edu.cn·[FROM: 222.64.221.*]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店