Who can provide FTP that programed with WINSOCK!!
Document or code !!
and principle of ftp!!

解决方案 »

  1.   

    See the samples below, useful :http://www.codeproject.com/internet/ftpwanderer.asp
    http://www.codeproject.com/internet/FTPServer.asp
      

  2.   

    Thank U very much!
    But either of these two programs is not use winsock directly!
    The first use WinInet, and the second use CSocket class!  I just want program with winsock!!
      

  3.   

    there are some documents about ftp.ftp://ftp.rfc-editor.org/in-notes/
      

  4.   

    here's some sample code, maybe U can find something useful in it!login(char *ip,char *user,char *pass)
    {
    ...

    WSAStartup(MAKEWORD(2,2), &wsaData);
    handle = socket(AF_INET,SOCK_STREAM,0);

    memset(&server,0,sizeof(server));
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = inet_addr(ip);
    server.sin_port = htons(21); connect(handle,(struct sockaddr *)&server,sizeof(struct sockaddr)); setsockopt(handle,SOL_SOCKET,SO_LINGER,0,0);
    setsockopt(handle,SOL_SOCKET,SO_REUSEADDR,0,0);
    setsockopt(handle,SOL_SOCKET,SO_KEEPALIVE,0,0); len = 0;
    count = 3;
    memset(buffer, 0, sizeof(buffer));
    while(count >= 0)
    {
    len = recv(handle, buffer, sizeof(buffer),0);
    if(len >= 0)
    break;
    len = 0;
    count--;
    }
    buffer[len] = '\0';
    if((strstr(buffer,"220") == NULL) || (strstr(buffer,"ready") == NULL))
    {
    sprintf(szErrorInfo,"与服务器连接失败: %d", WSAGetLastError());
    logout(handle);
    return FALSE;
    }
    //用户名
    sprintf(buffer,"USER %s\r\n",user);
    send(handle,buffer,strlen(buffer),0);
    len = 0;
    count = 3;
    memset(buffer, 0, sizeof(buffer));
    while(count >= 0)
    {
    len = recv(handle, buffer, sizeof(buffer),0);
    if(len >= 0)
    break;
    len = 0;
    count--;
    }
    buffer[len] = '\0';
    if((strstr(buffer,"331") == NULL) || (strstr(buffer,"required for") == NULL))
    {
    sprintf(szErrorInfo,"用户名错误: %d", WSAGetLastError());
    logout(handle);
    return FALSE;
    }

    //口令
    sprintf(buffer,"PASS %s\r\n",pass);
    send(handle,buffer,strlen(buffer),0);
    len = 0;
    count = 3;
    memset(buffer, 0, sizeof(buffer));
    while(count >= 0)
    {
    len = recv(handle, buffer, sizeof(buffer),0);
    if(len >= 0)
    break;
    len = 0;
    count--;
    }
    buffer[len] = '\0';
    if((strstr(buffer,"230") == NULL) || (strstr(buffer,"logged in") == NULL))
    {
    sprintf(szErrorInfo,"用户名或口令错误: %d", WSAGetLastError());
    logout(handle);
    return FALSE;
    }
    logout(handle);
    return TRUE;
    }
      

  5.   

    I very want a example for FTP Server, but not programed with CSocket!!