资源简介
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
相关资源
- Linux_C函数库参考手册(清晰版完整版
- 马哥Linux运维共208讲(初级中级高级必
- 《嵌入式Linux驱动开发教程》书中完整
- Linux常用命令手册大全
- 电子相册--QT
- NVIDIA-Linux-x86_64-378.09
- NVIDIA-Linux-x86_64-384.59
- linux下基于TCP的多用户聊天室含文档
- Linux贪吃蛇
- Linux音乐播放器代码
- linux的Qt设置系统时间
- sd卡协议(中文)
- hunt-1.5一种linux上很强的会话劫持工具
- Linux下socket实现TCP网络通讯多个客户端
- linux p2p通信
- linux x64 readline-devel-all 安装rpm介质
- Hadoop与Spark安装配置手册
- FOCAS2/Ethernet for Linux
- 马哥linux运维整套视频.txt
- Anaconda3-5.3.0-Linux-x86_64.sh
- 完整版CentOS-6.6-i386-bin-DVD1.iso,linux镜
- CentOS-6.6-i386-bin-DVD1.iso,linux镜像文件
- 单词处理程序
- linux环境下基于socket通信的ftp系统
- Allegro SPB16 6 Install Guide For Linux 1
- 基于arm版的电子钢琴
- spec文件详解
- 老男孩linux笔试题
- linuxC获取PCI设备名和厂商名
- linux驱动开发详解第2版光盘资料
评论
共有 条评论