• 大小: 35KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-05-13
  • 语言: 其他
  • 标签: Linux  

资源简介

Linux下的ftp实现方法,可以连接远程服务器,实现下载上传

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
//#include 
#include 
#include 
#include 

#define DEFAULT_FTP_PORT 21

extern int h_errno;

char user[64]; //ftp usr
char passwd[64]; //ftp passwd

//ftp server address
//记录端口号IP地址
struct sockaddr_in ftp_server local_host;//FTP服务器 本地主机

//该结构记录主机的信息,包括主机名、别名、地址类型、地址长度和地址列表。
struct hostent * server_hostent;//该结构记录主机的信息

int sock_control;

//ftp mode 0 is PORT(主动模式) 1 is PASV(被动模式);
int mode = 1; 

//echo_off and echo_on for get usr password from stdin
//echo_off和echo_on从标准输入获得用户名和密码。
static struct termios stored_settings;
void echo_off(void)
{
    struct termios new_settings;
    tcgetattr(0&stored_settings);
    new_settings = stored_settings;
    new_settings.c_lflag &= (~ECHO);
    tcsetattr(0TCSANOW&new_settings);
    return;
}
void echo_on(void)
{
    tcsetattr(0TCSANOW&stored_settings);
    return;
}
//命令错误退出
void cmd_err_exit(char * err_msg int err_code)
{
printf(“%s\n“ err_msg);
exit(err_code);
}
/*************************************************/
//函数功能:向结构体中添加IP地址与端口号
//函数参数:IP地址,结构体,端口号

/*************************************************/
int fill_host_addr(char * host_ip_addr struct sockaddr_in * host int port)
{
//如果端口号小于或等于0  或者大于65535
if(port <= 0 || port > 65535) 
return 254;
//将结构体清零
bzero(host sizeof(struct sockaddr_in));
//设置为 IPv4 网络协议的套接字类型
host->sin_family = AF_INET;
//如果正确执行将返回一个无符号长整数型数。
//如果传入的字符串不是一个合法的IP地址,将返回INADDR_NONE。
    if(inet_addr(host_ip_addr) != -1)
{
//将地址保存到结构体中
        host->sin_addr.s_addr = inet_addr(host_ip_addr);
}
    else 
{
//返回对应于给定主机名的包含主机名字和地址信息的hostent结构的指针。
if((server_hostent = gethostbyname(host_ip_addr)) != 0)
{
//将地址放在结构体中
memcpy(&host->sin_addr server_hostent->h_addr\
        sizeof(host->sin_addr));
}
        else return 253;
}
//将端口号保存在结构体中
    host->sin_port = htons(port);
return 1;
}


/*************************************************/
//函数功能:创建socket并连接,设置收发时间,
//函数参数:IP地址端口号结构体,收发时间设置(1 !1 3秒)
// 返回值 :配置好的Socket
/*************************************************/
int xconnect(struct sockaddr_in *s_addr int type)
{
struct timeval outtime;
int set;
//SOCK_STREAM: 提供面向连接的稳定数据传输,即TCP协议。
//创建scoket
int s = socket(AF_INET SOCK_STREAM 0);
if(s < 0)
cmd_err_exit(“creat socket error!“ 249);
//为控制设定时间 socket
//set outtime for the control socket
if(type == 1)
{
outtime.tv_sec = 0;
outtime.tv_usec = 300000;
}
else
{
outtime.tv_sec = 5;
outtime.tv_usec = 0;
}
//设置socket收发时限。
set = setsockopt(s SOL_SOCKETSO_RCVTIMEO &outtimesizeof(outtime));
if(set !=0)
{
//失败输出错误原因。
printf

评论

共有 条评论