那位大虾能用Socket编写下载HTTP的东西,比如是一个htm文件,还有FTP的东西
下载ZIP文件应该也能用HTTP协议来走吧,该怎么办呢,分不够可以再加,大虾们一定要帮忙呀,很急的.
EMAIL:[email protected]

解决方案 »

  1.   

    http://www.codeproject.com/internet/parse_html.asp
    http://www.codeproject.com/internet/ftpwanderer.asp
      

  2.   

    http://www.csdn.net/Expert/TopicView1.asp?id=983832
      

  3.   

    http://www.codeguru.com/network/FileTransferUsingSockets.shtml
    http://www.codeguru.com/network/mt_server.html
      

  4.   

    我是想类似这样
    WORD wVersionRequested;
            WSADATA wsaData;
            int err;
            wVersionRequested = MAKEWORD( 2, 0 );        err = WSAStartup( wVersionRequested, &wsaData );
            if ( err != 0 ) {
                /* Tell the user that we couldn't find a usable */
                /* WinSock DLL.                                  */
                return;
           }
           if ( LOBYTE( wsaData.wVersion ) != 2 ||
                    HIBYTE( wsaData.wVersion ) != 0 ) {
                /* Tell the user that we couldn't find a usable */
                /* WinSock DLL.                                  */
                WSACleanup( );
                return;
            }        //¹¹Ôì Socket
            SOCKET s=socket(AF_INET,SOCK_STREAM,0);        sockaddr_in addr;
            char strSubAddr[256],fname[256];
            char  strBuffer[MAX_PATH];        addr.sin_family=AF_INET;
    addr.sin_port=htons(80);
            //addr.sin_addr=in_addr("211.157.102.21");
    //addr.sin_addr.s_addr=inet_addr("211.157.102.21");
            //addr.sin_addr.s_addr=inet_addr("61.153.40.19");
            addr.sin_addr.s_addr=inet_addr("210.192.98.37");        int iResult;        //Á¬½Ó·þÎñÆ÷
        iResult=connect(s,(struct sockaddr *)&addr,sizeof(addr)); if(iResult==SOCKET_ERROR)
    {
    WSACleanup();
    return;
    }        //´«ÈëÃüÁîÐÐ
            PCSTR ps = "Get /code/downcode.asp?id=1601 HTTP/1.1\r\n"
                    "Host: www.vckbase.com\r\n"
                    "Accept: */*\r\n"
                    "Referer: http://www.vckbase.com/code/listcode.asp?mclsid=9&sclsid=901\r\n"
                    "User-Agent: Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)\r\n"
                    "Pragma: no-cache\r\n"
                    "Cache-Control: no-cache\r\n"
                    "Connection: close\r\n\r\n";
            //ps = "GET / HTTP/1.1\r\n"
                   // "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*\r\n"
                /*    "Accept-Language: zh-cn\r\n"
                    "Accept-Encoding: gzip, deflate\r\n"
                    "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n"
                    "Host: www.liutaotao.com\r\n"
                    "Connection: Keep-Alive\r\n\r\n";     */
            strcpy(strSubAddr,ps);        //дÈÕÖ¾
            Memo1->Clear();
            Memo1->Lines->Add(ps);
            Memo1->Lines->Add("Receve:---------------------------");
            Memo1->Lines->Add("\n\n");        //·¢ËÍÏûÏ¢
            iResult=send(s,strSubAddr,strlen(strSubAddr),0);        if(iResult!=SOCKET_ERROR)
            {
                    int iFile=FileCreate("D:\\MyTemp\\test.htm");
                    AnsiString stemp="";
                    if(iFile==-1)
                    {
                            ShowMessage("Create failed!");
                            return;
                    }
    do
    {
    strset(strBuffer,0);
                    //½ÓÊÕ×Ö·û
    iResult=recv(s,strBuffer,sizeof(strBuffer),0);
                    //FileWrite(iFile,strBuffer,sizeof(strBuffer));
                    stemp+=strBuffer;
                    Memo1->Lines->Add((AnsiString)strBuffer);
            }
            while(iResult>0);
                    
                    int tt=stemp.Pos("<");
                    AnsiString t2=stemp.SubString(tt,stemp.Length()-tt+1);
                    FileWrite(iFile,stemp.SubString(tt,stemp.Length()-tt).c_str(),stemp.SubString(tt,stemp.Length()-tt).Length());
                    FileClose(iFile);
            }
    存成本地的htm文件,不知道怎么做,这样还差太远,还有FTP的东西
      

  5.   

    CFtpConnection封装FTP,CHttpConnection封装HTTP,你可以用它们。
    用法举例:
    CInternetSession    INetSession;
    CInternetConnection INetConn( &INetSession, strServer );
    CFtpConnection* pFtp = INetSession.GetFtpConnection();
    CHttpConnection* pHttp = INetSession.GetHttpConnection();
         jmcooler<签名>
      

  6.   

    如果用API函数send(...)呢,那位老大能帮忙呀
      

  7.   

    //Get html page by SDK socket
    #define host_name "www.csdn.net"
    #define winsock_version 0x0101
    void main()
    {
        SOCKADDR_IN saServer;
    LPHOSTENT lphostent;
    WSADATA wsadata;
        SOCKET hsocket;
    int nRet;
        char hostname[100] ;
    wsprintf(hostname,"GET /expert/topic/378/378382.shtm HTTP/1.0 %c%c",10,10);
    printf("%s",hostname);
    char dest[1000];
    if(WSAStartup(winsock_version,&wsadata))
    printf("can't open");
        lphostent=gethostbyname(host_name);
        if(lphostent==NULL)
    printf("lphostent is null");
    hsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        saServer.sin_family = AF_INET;
    // Use def. now, need to handle general case
    saServer.sin_port = htons(80);

    saServer.sin_addr = *((LPIN_ADDR)*lphostent->h_addr_list);
        nRet = connect(hsocket, (LPSOCKADDR)&saServer, sizeof(SOCKADDR_IN));
    if (nRet == SOCKET_ERROR)
    {
    printf("can't connect");
    closesocket(hsocket);
    return;
    }
    else
    printf("connected with %s\n",host_name);
        nRet = send(hsocket, hostname, strlen(hostname), 0);
    if (nRet == SOCKET_ERROR)
    {
    printf("send() failed");
    closesocket(hsocket);

    }
    else
    printf("send() OK\n");
    nRet=1;
    while(nRet>0)
    {
    nRet=recv(hsocket,(LPSTR)dest,sizeof(dest),0);
    if(nRet>0)
    dest[nRet]=0;
    else
    dest[0]=0;
    printf("\nReceived bytes:%d\n",nRet);
    printf("Result:\n%s",dest);
    }

    }///////////////////////////////////////////////////////////////////////////
    //SDK post
    ///////////////////////////////////////////////////////////////////////////
    #include "stdafx.h"
    #include "winsock.h"
    #pragma comment(lib,"ws2_32.lib")
    #define winsock_version 0x0101
    void main()
    {
    //I create  C:\Inetpub\wwwroot\test\test.asp ,start the web service
    //start my program, the result is OK.
    //If it works,it is written by masterz,otherwise I don't know who write it.
        SOCKADDR_IN saServer;
    LPHOSTENT lphostent;
    WSADATA wsadata;
        SOCKET hsocket;
    int nRet;
    const char* host_name="127.0.0.1";
    char* req="POST /test/test.asp HTTP/1.0\r\n"
    "From: local\r\n"
    "User-Agent: post_test/1.0\r\n"
    "Content-Type: application/x-www-form-urlencoded\r\n"
    "Content-Length: 20\r\n\r\n"
    "type=12345&name=aaaa";
    if(WSAStartup(winsock_version,&wsadata))
    printf("can't initial socket");
        lphostent=gethostbyname(host_name);
        if(lphostent==NULL)
    printf("lphostent is null");
    hsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        saServer.sin_family = AF_INET;
    // Use def. now, need to handle general case
    saServer.sin_port = htons(80);
    saServer.sin_addr = *((LPIN_ADDR)*lphostent->h_addr_list);
        nRet = connect(hsocket, (LPSOCKADDR)&saServer, sizeof(SOCKADDR_IN));
    if (nRet == SOCKET_ERROR)
    {
    printf("can't connect");
    closesocket(hsocket);
    return;
    }
    else
    printf("connected with %s\n",host_name);
    nRet = send(hsocket, req, strlen(req), 0);
    if (nRet == SOCKET_ERROR)
    {
    printf("send() failed");
    closesocket(hsocket);

    }
    else
    printf("send() OK\n");
    char dest[1000];
    nRet=1;
    while(nRet>0)
    {
    nRet=recv(hsocket,(LPSTR)dest,sizeof(dest),0);
    if(nRet>0)
    dest[nRet]=0;
    else
    dest[0]=0;
    printf("\nReceived bytes:%d\n",nRet);
    printf("Result:\n%s",dest);
    }
    }