• 大小: 4KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-12
  • 语言: 其他
  • 标签: FTP  

资源简介

FTP客户端服务器端全部代码

资源截图

代码片段和文件信息

//
//  THFTPAPI.c
//  MyFTP
//
//  Created by TanHao on 13-6-6.
//  Copyright (c) 2013年 http://www.tanhao.me. All rights reserved.
//

#include “THFTPAPI.h“

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

//创建一个socket并返回
int socket_connect(char *hostint port)
{
    struct sockaddr_in address;
    int s opvalue;
    socklen_t slen;
    
    opvalue = 8;
    slen = sizeof(opvalue);
    memset(&address 0 sizeof(address));
    
    if ((s = socket(AF_INET SOCK_STREAM 0)) < 0 ||
        setsockopt(s IPPROTO_IP IP_TOS &opvalue slen) < 0)
        return -1;
    
    //设置接收和发送超时
    struct timeval timeo = {15 0};
    setsockopt(s SOL_SOCKET SO_SNDTIMEO &timeo sizeof(timeo));
    setsockopt(s SOL_SOCKET SO_RCVTIMEO &timeo sizeof(timeo));
    
    address.sin_family = AF_INET;
    address.sin_port = htons((unsigned short)port);
    
    struct hostent* server = gethostbyname(host);
    if (!server)
        return -1;
    
    memcpy(&address.sin_addr.s_addr server->h_addr server->h_length);
    
    if (connect(s (struct sockaddr*) &address sizeof(address)) == -1)
        return -1;
    
    return s;
}

//连接到一个ftp的服务器,返回socket
int connect_server( char *host int port )
{    
    int       ctrl_sock;
    char      buf[512];
    int       result;
    ssize_t   len;
    
    ctrl_sock = socket_connect(host port);
    if (ctrl_sock == -1) {
        return -1;
    }
    
    len = recv( ctrl_sock buf 512 0 );
    buf[len] = 0;
    sscanf( buf “%d“ &result );
    if ( result != 220 ) {
        close( ctrl_sock );
        return -1;
    }
    
    return ctrl_sock;
}

//发送命令返回结果
int ftp_sendcmd_re( int sock char *cmd void *re_buf ssize_t *len)
{
    char        buf[512];
    ssize_t     r_len;
    
    if ( send( sock cmd strlen(cmd) 0 ) == -1 )
        return -1;
    
    r_len = recv( sock buf 512 0 );
    if ( r_len < 1 ) return -1;
    buf[r_len] = 0;
    
    if (len != NULL) *len = r_len;
    if (re_buf != NULL) sprintf(re_buf “%s“ buf);
    
    return 0;
}

//发送命令返回编号
int ftp_sendcmd( int sock char *cmd )
{
    char     buf[512];
    int      result;
    ssize_t  len;
    
    result = ftp_sendcmd_re(sock cmd buf &len);
    if (result == 0)
    {
        sscanf( buf “%d“ &result );
    }
    
    return result;
}

//登录ftp服务器
int login_server( int sock char *user char *pwd )
{
    char    buf[128];
    int     result;
    
    sprintf( buf “USER %s\r\n“ user );
    result = ftp_sendcmd( sock buf );
    if ( result == 230 ) return 0;
    else if ( result == 331 ) {
        sprintf( buf “PASS %s\r\n“ pwd );
        if ( ftp_sendcmd( sock buf ) != 230 ) return -1;
        return 0;
    }
    else
        return -1;
}

int create_datasock( int ctrl_sock )
{
    int     lsn_sock;
    int     port;
    int   

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件       12198  2013-07-19 09:48  THFTPAPI.c
     目录           0  2013-07-19 09:49  __MACOSX\
     文件         171  2013-07-19 09:48  __MACOSX\._THFTPAPI.c
     文件         998  2013-06-19 14:05  THFTPAPI.h
     文件         171  2013-06-19 14:05  __MACOSX\._THFTPAPI.h

评论

共有 条评论