从今天开始,正式进入MiniFtp的代码编写阶段了,好兴奋,接下来很长一段时间会将整个实现过程从无到有一点点实现出来,达到综合应用的效果,话不多说正入正题: 这节主要是将基础代码框架搭建好,基于上节介绍的系统逻辑结构,首先建立主控模块: 在学习网络编程时积累了不少的工具代码,所以可以将其整合到系统工具模块: sysutil.h: #ifndef _SYS_UTIL_H_ #define _SYS_UTIL_H_int getlocalip(char *ip); void activate_non…
春节过后,万物复苏,在这元宵佳节的前一天,决定继续开启新年的学习计划,生命在于运动,提高源于学习,在经过漫长的Linux网络编程学习后,接下来会以一个综合的小项目来将所学的知识点综合运用,首先是对项目的一些概念进行了解,纯理论,有些枯燥,但是很重要,当然不用去背,大概了解一下既可,下面开始. FTP简介 文件传输协议FTP(File Transfer Protocol,由RFC 959描述). FTP工作在TCP/IP协议族的应用层,其传输层使用的是TCP协议,它是基于客户/服务器模式工作的.…
上次中实现了FTP命令的映射来避免很多if....else的判断,这次主要是开始实现目录列表的传输,先看一下目前实现的: 数据连接创建好之后则开始进行目录列表的传输了,而要传输目录列表,首先要将目录列表这些数据获取出来,所以这次主要是完成目录列表数据的获取. 还是对照着vsftpd的目录列表的显示来做参考: 将其列表输出拷贝出来: 其它跟"ls -l"的输出形式类似: 下面定义一个函数来将当前目录列出来: int list_common(void) { //打开当前目录 DIR *di…
转眼兴奋的五一小长假就要到来了,在放假前夕还是需要保持一颗淡定的心,上次中已经对miniFTP有基础框架进行了搭建,这次继续进行往上加代码,这次主要还是将经历投射到handle_child()服务进程上来,其它的先不用关心: 而它主要是完成FTP协议相关的功能,所以它的实现放在了ftpproto.c,目前连接成功之后效果是: 其中"USER webor2006"后面是包含"\r\n"的,FTP的协议规定每条指令后面都要包含它,这时handle_child()函数就会…
上节中实现了"USER"和"PASS"命令,如下: 事实上FTP是有很多命令组成的,如果就采用上面的这种方法来实现的话,就会有很多if...else if语句,代码显得很臃肿,所以有必要想办法来避免这种写法,所以一个新的方式既将诞生------命令映射,实际上在之前读取配置文件变量时就已经接触到了,下面则看具体的做法: 下面这个表是FTP命令的声明: 函数 说明 static void do_user(session_t *sess); static void do…
上节中实现了配置文件的解析,这节来实现用户登录的验证,首先用客户端来登录vsftpd来演示登录的过程: 接着再连接miniftpd,来看下目前的效果: 接下来实现它,与协议相关的模块都是在ftpproto.c中完成的,目前的代码如下: #include "ftpproto.h" #include "sysutil.h" #include "str.h" void handle_child(session_t *sess) { writen(ses…
间隔了一周时间没写了,由于今年的股势行情貌似不错的样子,对于对股市完全不懂的我也在蠢蠢欲动,所以最近一周业余时间在“不务正业”-----学习炒股.发现学习它其实挺费神的,满脑子都是走势图,而且是神经有点受刺激的感觉,发现这个坚决不能在上班时间去想这事,不然会非常影响情绪,毕境对于普通老百姓来讲经济来源还主要是来源于工作,专职炒股也不适合像我这样笨拙的人,不过可以业余有时间学习学习,入市那还是得非常非常谨慎,所以放下它,接着来学习技术这才是王道,言归正传. 上一次对字符串工具模块进行了封装,这次主…
前面已经对FTP相关的一些概念有了基本的认识,接下来就要进入代码编写阶段了,也是非常兴奋的阶段,在开启这个它之前先对项目需求进行一个梳理,对其我们要实现的FTP服务器是一个什么样子. ftp命令列表 要实现FTP服务器,首先要实现的就一些标准的FTP命令,这些命令如下: 命令类型 命令 功能说明 访问控制命令 USER 服务器上的用户名. PASS 用户口令. CWD或XCWD 改变工作目录. CDUP或XCUP 回到上一层目录(父目录) QUIT 退出 ACCT 暂不实现 SMNT 暂不实现…
建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 其中三次握手即建立连接 四次挥手则为关闭连接 TCP连接的11种状态 客户端独有的:(1)SYN_SENT (2)FIN_WAIT1 (3)FIN_WAIT2 (4)CLOSING (5)TIME_WAIT . 服务器独有的:(1)LISTEN (2)SYN_RCVD (3)CLOSE_WAIT (4)LAST_ACK . 共有的:(1)CLOSED (2)ESTABLISHED 建立连接时的状态变迁 一开始,建立连…
1.System V IPC System V中引入的几种新的进程间通信方式,消息队列,信号量和共享内存,统称为System V IPC,其具体实例在内核中是以对象的形式出现的,称为IPC 对象,每个IPC对象在内核中都有一个唯一的标识符.这个标识符的唯一性在同一类IPC中成立,不同IPC的标识符可以相同.IPC对象三个知识点差不多,有一个数据结构,还有各自的使用的函数,这里只以消息队列为例,信号量和共享内存大家自己去看咯. IPC对象在程序中是使用关键字key来访问,服务端和客户端用的关键字必…