⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 202.htm

📁 unix高级编程原吗
💻 HTM
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>CTerm非常精华下载</title>
</head>
<body bgcolor="#FFFFFF">
<table border="0" width="100%" cellspacing="0" cellpadding="0" height="577">
<tr><td width="32%" rowspan="3" height="123"><img src="DDl_back.jpg" width="300" height="129" alt="DDl_back.jpg"></td><td width="30%" background="DDl_back2.jpg" height="35"><p align="center"><a href="http://apue.dhs.org"><font face="黑体"><big><big>apue</big></big></font></a></td></tr>
<tr>
<td width="68%" background="DDl_back2.jpg" height="44"><big><big><font face="黑体"><p align="center">               ● UNIX网络编程                       (BM: clown)                </font></big></big></td></tr>
<tr>
<td width="68%" height="44" bgcolor="#000000"><font face="黑体"><big><big><p   align="center"></big></big><a href="http://cterm.163.net"><img src="banner.gif" width="400" height="60" alt="banner.gif"border="0"></a></font></td>
</tr>
<tr><td width="100%" colspan="2" height="100" align="center" valign="top"><br><p align="center">[<a href="index.htm">回到开始</a>][<a href="185.htm">上一层</a>][<a href="203.htm">下一篇</a>]
<hr><p align="left"><small>标题   Re: 我重新修改了一下,再试一下 [re: jcsun] <br>

作者 jkl (member) <br>

时间 11/13/00 03:37 PM <br>

  <br>

#include "sys/types.h" <br>

#include "sys/socket.h" <br>

#include "netinet/in.h" <br>

#include "arpa/inet.h" <br>

#include "fcntl.h" <br>

#include "unistd.h" <br>

#include "stdarg.h" <br>

#include "stdio.h" <br>

#include "netdb.h" <br>

  <br>

int verbose = 1; <br>

FILE *ftpio = NULL; <br>

char buf[4096]; <br>

  <br>

int ftpcmd(int sockftp,char *fmt,...) <br>

{ <br>

        va_list vp; <br>

        int err,len; <br>

  <br>

  <br>

        if (ftpio == NULL) { <br>

                ftpio = fdopen(sockftp,"r"); <br>

                if (ftpio == NULL) <br>

                        return -1; <br>

        } <br>

  <br>

        if (fmt) { <br>

                va_start(vp,fmt); <br>

                len = vsprintf(buf,fmt,vp); <br>

                buf[len++] = '\r'; <br>

                buf[len++] = '\n'; <br>

                write(sockftp,buf,len); <br>

                if (verbose) <br>

                        write(1,buf,len); <br>

        } <br>

  <br>

        do { <br>

                if (fgets(buf,sizeof(buf),ftpio) == NULL) <br>

                        return -1; <br>

                if (verbose) <br>

                        printf(buf); <br>

        } while(buf[3] == '-'); <br>



  <br>

        sscanf(buf,"%d",&err); <br>

        return err; <br>

} <br>

  <br>

int ftp(char *host,char *user,char *pass,char *filename,char *savefile) <br>

{ <br>

        int sockftp = -1,sockdata = -1,sockxfer = -1; <br>

        struct sockaddr_in addr; <br>

        unsigned long hostip; <br>

        int len,tmp,err; <br>

        int retval = -1; <br>

        int savefd; <br>

        unsigned char *c,*p; <br>

        struct hostent *he; <br>

  <br>

        hostip = inet_addr(host); <br>

        if (hostip == -1) { <br>

                he = gethostbyname(host); <br>

                if (he == NULL) <br>

                        return -1; <br>

                hostip = * (unsigned long *)he->h_addr; <br>



        } <br>

  <br>

        sockftp = socket(AF_INET,SOCK_STREAM,0); <br>

        if (sockftp == -1) <br>

                goto out; <br>

  <br>

        addr.sin_family = PF_INET; <br>

        addr.sin_port = htons(21); <br>

        addr.sin_addr.s_addr = hostip; <br>

        if (connect(sockftp,(struct sockaddr *)&addr,sizeof(addr)) ==-1) <br>

            goto out; <br>

  <br>

        err = ftpcmd(sockftp,NULL); <br>

        if (err != 220)                goto out; <br>

  <br>

        err = ftpcmd(sockftp,"USER %s",user); <br>

        if (err != 331)                goto out; <br>

  <br>

        err = ftpcmd(sockftp,"PASS %s",pass); <br>

        if (err != 230)                goto out; <br>

  <br>

        err = ftpcmd(sockftp,"TYPE I"); <br>



        if (err != 200)                goto out; <br>

  <br>

        sockdata = socket(AF_INET,SOCK_STREAM,0); <br>

        if (sockdata == -1)            goto out; <br>

        tmp = sizeof(addr); <br>

        getsockname(sockftp,(struct sockaddr *)&addr,&tmp); <br>

        addr.sin_port = 0; <br>

  <br>

        if (bind(sockdata,(struct sockaddr *)&addr,sizeof(addr)) == -1) <br>

           goto out; <br>

        if (listen(sockdata,1) == -1) <br>

           goto out; <br>

  <br>

        tmp = sizeof(addr); <br>

        getsockname(sockdata,(struct sockaddr *)&addr,&tmp); <br>

        c = (unsigned char *)&addr.sin_addr; <br>

        p = (unsigned char *)&addr.sin_port; <br>

        err = ftpcmd(sockftp,"PORT %d,%d,%d,%d,%d,%d",c[0],c[1],c[2],c[3],p[0],p <br>

[1]); <br>

        if (err != 200)                goto out; <br>

        err = ftpcmd(sockftp,"RETR %s",filename); <br>

        if (err != 150)                goto out; <br>



  <br>

        tmp = sizeof(addr); <br>

        sockxfer = accept(sockdata,(struct sockaddr *)&addr,&tmp); <br>

        if (sockxfer == -1)            goto out; <br>

        savefd = open(savefile,O_WRONLY|O_CREAT,0644); <br>

        if (savefd == -1)              goto out; <br>

        retval = 0; <br>

        while ((len=read(sockxfer,buf,sizeof(buf)))>0) { <br>

               write(savefd,buf,len); <br>

               retval += len; <br>

        }; <br>

        close(savefd); <br>

out: <br>

        close(sockxfer); <br>

        close(sockdata); <br>

        close(sockftp); <br>

        if (ftpio) { <br>

                fclose(ftpio); <br>

                ftpio = NULL; <br>

        } <br>

        return retval; <br>

} <br>

</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="185.htm">上一层</a>][<a href="203.htm">下一篇</a>]
<p align="center"><a href="http://cterm.163.net">欢迎访问Cterm主页</a></p>
</table>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -