LoveUnix » 编程开发 & Rational » 请问在c下如何用socket编写ftp客户端?
让LU留住您的每

一天 让LU博客留住您的每一天
2004-7-28 23:04 ppsscan1
<!--emo&:haha:--><img src='style_emoticons/default/haha.gif' border='0' style='vertical-align:middle' alt='haha.gif' /><!--endemo--> <br />有例子程序吗?谢谢!

2004-7-28 23:34 carol
ft 我也要   !!!!!!!!!!<br /><br />windows 上 vb 用 winsock 开发的 telnet client 端 和 ftp server 程序!!!!! 谁有阿 <!--emo&:mad:--><img src='style_emoticons/default/mad.gif' border='0' style='vertical-align:middle' alt='mad.gif' /><!--endemo-->

2004-7-29 11:26 99大话王
了解FTP协议<br /><br />socket连接connect到服务器(IP)端口(PORT)<br />发送send和接收recv数据并根据FTP协议解释

2004-7-29 12:02 无间道
我有C代码的,要不要?

2004-7-29 12:12 carol
<!--QuoteBegin-无间道+2004-07-29 12:02:05--><div class='quotetop'>QUOTE(无间道 @ 2004-07-29 12:02:05)</div><div class='quotemain'><!--QuoteEBegin--> 我有C代码的,要不要? <!--QuoteEnd--></div><!--QuoteEEnd--><br /><!--emo&:blush:--><img src='style_emoticons/default/blush.gif' border='0' style='vertical-align:middle' alt='blush.gif' /><!--endemo-->  好呀~~~~ 发我邮箱吧~ puccacarol@hotmail.com

2004-7-29 13:04 wuhu
我也要,jiangming888@163.com

2004-7-29 15:04 ppsscan1
太感谢了&#33;请发给我&#33;ppsscan9@yahoo.com.cn

2004-7-29 17:20 omanx
俺也要一份,谢谢,congge8111@tom.com

2004-7-29 17:56 where
多谢好人,给我一份吧  yz_temp@tom.com

2004-7-30 08:43 无间道
我把它帖出来吧<br /><br />#include &lt;winsock.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;stdio.h&gt;<br />#include &quot;wininet.h&quot;<br /><br />#define MAX_ALLLEN 4096<br /><br />int GetPort(char *buf,unsigned short&amp;port);<br />int FtpFile(char *url,long&amp; count);<br />int ChangeStr(char* buf)<br />{<br />        int l = strlen(buf);<br />        l--;<br />        while(buf[l] == &#39;\r&#39; ||buf[l] == &#39;\n&#39; )<br />                l--;<br />        buf[l+1] = 0;<br />        return 0;<br />}<br />/*<br />文件格式如:<br /><a href='ftp://22.108.33.3/5.rm' target='_blank'>ftp://22.108.33.3/5.rm</a><br /><a href='ftp://22.108.33.3/6.rm' target='_blank'>ftp://22.108.33.3/6.rm</a><br />...<br />*/<br />int main(int argc,char** argv)<br />{<br />        FILE *fp;<br />        fp = fopen(argv[1],&quot;r&quot;);<br />        if(fp == 0)<br />                return -1;<br />        char buf[1024];<br />        char url[1024];<br />        long num=0,count=0;<br />        while(fgets(buf,1024,fp))<br />        {<br />                ChangeStr(buf);<br />                if(strnicmp(buf,&quot;ftp://&quot;,6) == 0)<br />                {<br />                        strcpy(url,buf+2);<br />                        FtpFile(url,count);<br />                        num++;<br />                        printf(&quot;num = %ld,count =%ld&quot;,num,count);<br />                }<br />        }<br />        fclose(fp);<br />        return 0;<br />}<br /><br />int FtpFile(char *url,long &amp;count)<br />{<br />        WSADATA cWSAData;<br />        if(WSAStartup(MAKEWORD(2, 2), &amp;cWSAData))<br />                return -1;<br />        char szServer[256];<br />        char szPath[256];<br />        char szUser[256];<br />        char szPwd[256];<br />        URL_COMPONENTS urlcom;<br />        memset(&amp;urlcom, 0, sizeof(URL_COMPONENTS));<br />        urlcom.dwStructSize = sizeof(URL_COMPONENTS);<br />        urlcom.lpszHostName = szServer;<br />        urlcom.dwHostNameLength = 255;<br />        urlcom.lpszUrlPath = szPath;<br />        urlcom.dwUrlPathLength = 255;<br />        urlcom.lpszUserName = szUser;<br />        urlcom.dwUserNameLength = 255;<br />        urlcom.lpszPassword = szPwd;<br />        urlcom.dwPasswordLength = 255;<br />        int        ret = InternetCrackUrl(url, strlen(url), 0, &amp;urlcom);<br />        if(ret == FALSE)<br />                return 1;<br /><br />        SOCKET comm_socket,data_socket;<br />        struct sockaddr_in comm_addr,data_addr;<br />        //将域名转换成IP;<br />        PHOSTENT hp;<br />        if ( &#33;isdigit(szServer[0]) ) <br />        {<br />                hp = gethostbyname(szServer);<br />                if (hp == NULL ) <br />                        return 1;<br />                memset(&amp;comm_addr,0,sizeof(sockaddr_in));<br />                memcpy(&amp;comm_addr.sin_addr,hp-&gt;h_addr,hp-&gt;h_length);<br />                comm_addr.sin_family =  hp-&gt;h_addrtype;<br />                comm_addr.sin_port = htons(urlcom.nPort);<br />        }<br />        else<br />        {<br />                memset(&amp;comm_addr,0,sizeof(sockaddr_in));<br />                comm_addr.sin_addr.s_addr=inet_addr(szServer);<br />                comm_addr.sin_family =AF_INET;<br />                comm_addr.sin_port = htons(urlcom.nPort);<br />        }<br /><br /><br />        comm_socket = socket(AF_INET,SOCK_STREAM,0);<br /><br /><br /><br />//        setsockopt(comm_socket,SOL_SOCKET ,SO_RCVTIMEO,(char *)&amp;nTimeOut,sizeof(nTimeOut));<br />//        setsockopt(comm_socket,SOL_SOCKET ,SO_SNDTIMEO,(char *)&amp;nTimeOut,sizeof(nTimeOut));<br /><br />        ret=connect(comm_socket,(struct sockaddr *)&amp;comm_addr,sizeof(comm_addr));<br />        if(ret == SOCKET_ERROR)<br />        {<br />                closesocket(comm_socket);<br />                return 1;<br />        }<br />        char buf[MAX_ALLLEN];<br />        char username[300];<br />        char password[300];<br />        char command[300];<br />        memset(buf,0,MAX_ALLLEN);<br />        memset(username,0,300);<br />        memset(password,0,300);<br />        memset(command,0,256);<br />        if(urlcom.lpszUserName[0] &#33;= 0)<br />                sprintf(username,&quot;USER %s\r\n&quot;,urlcom.lpszUserName);<br />        else<br />                sprintf(username,&quot;USER anonymous\r\n&quot;);<br />//        if(urlcom.lpszPassword[0] &#33;= 0)<br />                sprintf(password,&quot;PASS %s\r\n&quot;,urlcom.lpszPassword);<br />//        else<br />//                sprintf(password,&quot;PASS my@company.com\r\n&quot;);<br />        send(comm_socket,username,strlen(username),0);<br />        ret = recv(comm_socket,buf,100,0);<br />        Sleep(1000);<br />        if(&#33;strstr(buf,&quot;\r\n&quot;) || ret == 0)<br />        {<br />                closesocket(comm_socket);<br />                return 1;<br />        }<br />        memset(buf,0,100);<br />        send(comm_socket,password,strlen(password),0);<br />        ret = recv(comm_socket,buf,100,0);<br />        Sleep(1000);<br />        if(&#33;strstr(buf,&quot;\r\n&quot;) || ret == 0)<br />        {<br />                closesocket(comm_socket);<br />                return 1;<br />        }<br />        memset(buf,0,100);<br />        send(comm_socket,&quot;TYPE I\r\n&quot;,8,0);<br />        ret = recv(comm_socket,buf,100,0);<br />        Sleep(1000);<br />        if(&#33;strstr(buf,&quot;\r\n&quot;) || ret == 0)<br />        {<br />                closesocket(comm_socket);<br />                return 1;<br />        }<br />        memset(buf,0,100);<br />        send(comm_socket,&quot;PASV\r\n&quot;,6,0);<br />        ret = recv(comm_socket,buf,100,0);<br />        Sleep(1000);<br />        if(&#33;strstr(buf,&quot;\r\n&quot;) || ret == 0)<br />        {<br />                closesocket(comm_socket);<br />                return 1;<br />        }<br />        sprintf(command,&quot;SIZE %s\r\n&quot;,szPath);<br />        send(comm_socket,command,sizeof(command),0);<br />        ret = recv(comm_socket,buf,100,0);<br />        if(&#33;strstr(buf,&quot;\r\n&quot;) || ret == 0)<br />        {<br />                closesocket(comm_socket);<br />                return 1;<br />        }<br />        count++;<br />        return 0;<br />}<br /><br />int GetPort(char* buf,unsigned short &amp;port)<br />{<br />        if(buf == NULL)<br />                return -1;<br />        unsigned short port1 = 0,port2 = 0;<br />        char *p = NULL;<br />        p = strchr(buf,&#39;(&#39;);<br />        if(p == NULL)<br />                return -1;<br />        int flag = 0;<br />        while(*p)<br />        {<br />                if(*p == &#39;,&#39;)<br />                {<br />                        flag++;<br />                        if(flag == 4)<br />                                port1 = atoi(p+1);<br />                        else if(flag == 5)<br />                        {<br />                                port2 = atoi(p+1);<br />                                break;<br />                        }<br />                }<br />                p++;<br />        }<br />        if(*p &amp;&amp; port1 &amp;&amp; port2)<br />        {<br />                port = port1 &lt;&lt; 8;<br />                port += port2;<br />        }<br />        return 0;<br />}

2004-7-30 09:25 大漠孤星
<!--emo&:rose:--><img src='style_emoticons/default/rose.gif' border='0' style='vertical-align:middle' alt='rose.gif' /><!--endemo--> 无间道不错啊~~<br /><br /><br />可惜是windows下的code.

2004-7-30 10:18 wuhu
修改修改,一定要修改成linux下的,

2004-7-30 12:28 无间道
<!--QuoteBegin-大漠孤星+2004-07-30 09:25:15--><div class='quotetop'>QUOTE(大漠孤星 @ 2004-07-30 09:25:15)</div><div class='quotemain'><!--QuoteEBegin--> <!--emo&:rose:--><img src='style_emoticons/default/rose.gif' border='0' style='vertical-align:middle' alt='rose.gif' /><!--endemo--> 无间道不错啊~~<br /><br /><br />可惜是windows下的code. <!--QuoteEnd--></div><!--QuoteEEnd--><br />别的地方都是标准C的,只有从URL里面取出PATH,USERNAME,PASSWORD,的方法用了win API

2004-7-30 18:39 无双
还是很有用的

2004-7-31 14:38 ppsscan1
请问如何上传下载文件?

2004-7-31 16:30 carol
<!--QuoteBegin-ppsscan1+2004-07-31 14:38:58--><div class='quotetop'>QUOTE(ppsscan1 @ 2004-07-31 14:38:58)</div><div class='quotemain'><!--QuoteEBegin--> 请问如何上传下载文件? <!--QuoteEnd--></div><!--QuoteEEnd--><br />在发贴子的添加附件里上传阿  <!--emo&:wub:--><img src='style_emoticons/default/wub.gif' border='0' style='vertical-align:middle' alt='wub.gif' /><!--endemo-->

2007-12-11 00:14 zmjone
Cpp1.obj : error LNK2001: unresolved external symbol __imp__InternetCrackUrlA@16
无间道大哥,我编译的时候有这个错误,该怎么解决呢

页: [1]


Powered by Discuz! Archiver 5.5.0  © 2001-2006 Comsenz Inc.