FTP服务器专属数字signals or 专属工具functionSignals220 FTP already read - 进run函数221 Byebye ~ - quit257 Dir - ls目录 ฅ՞••՞ฅ331 Password required - 用户名登录成功开始请求密码 ٩(๑◡๑)۶230 Log in successfully - 登录成功٩(ˊᗜˋ*)و530 sorry,please try again! - 再试一次 (´• ᵕ •)250 changed now directory successfully - 改变工作目录成功ヽ (✿▽) ノ550 failed to change the directory ! - 改变工作目录失败再来一次 (´• ᵕ •)200 type set to I - 成功切换到二进制模式 (๑•̀ㅂ•́)و✧200 type set to A - 成功切换至ASCII模式(๑•̀ㅂ•́)و✧ – 成功执行命令 200二进制 vs ASCII不管换行符 \r\n - \n 互转图片压缩包可执行文件 .txt / .c / .cpp / .html504 Type not supported - 没有找到相应模式再试试吧 (๑•̀ㅂ•́)و✧215 UNIX Type: L8 - 系统类型应答码(๑•̀ㅂ•́)و✧“211-” - 指的是我还有更多行“211” - 我说完了 (๑´ڡ๑)Functionsstrchr - 寻找某指定字符 strchr(buf, ’ a ’);toupper - 转换大小写 toupper(*cmd);send - 传输语句 - send(_ClientFd,Msg,strlen(Msg),0);close - 关闭getcwd - 获取当前工作目录 - getcwd(cwd,sizeof(cwd)) - 把当前的绝对目录,路径放入到cwd中recv - 把内容从内核的接受缓冲区读到制定位置(如buf) - recv(_ClientFd,buf ,sizeof(buf)-1,0);-注意返回的是实际接受到的字节数strcmp - 对比字符是否相同 - strcmp(buf,” Let’s 狗! ”);snprintf - 把一串字符输入到制定数组中(可读入%d等)- snprintf(MessagePWD,sizeof(MessagePWD),”257 Now Path is that \ %s\” \r\n “);chdir - 切换目录 - chdir(num);cerr/strerror - 系统错误时报错 - std::cerr “something boom!!! ” std::strerror(errno) std::endl;memset - 填充元素/覆盖元素进特定地址/数组 -memset(DataFd, 0 , sizeof(DataFd)); 先全填入为0htons - host to Networks short (16位) / 本机字节序(小端)转向网络字节序(大端)-DataAddr.sin_port htons(0)htonl - host to Networks long (32位) -DataAddr.sin_addr.s_addr htonl(INADDR_ANY)socket - 创建套接字 - socket(协议传输方式协议编号); -socket(AF_INET,SOCK_STREAM,0);bind - 绑定IP与端口给特定文件描述符 - bind(文件描述符包含IP端口的结构体结构体长度);-int bindRet bind(DataFd,(sockaddr*)DataAddr,sizeof(DataAddr));listen - 监听 -int ListenRet listen(DataFd,1);//0不排队1排队accept - 接受连接 - accept(文件描述符包含IP端口的结构体结构体的长度);-accept(ListenFd,(sockaddr*)DataAddr,ClientLen;getsockname (bind对立面) - 问端口 -socklen_t AddrLen sizeof(DataAddr); ​ getsockname(DataFd,(sockaddr *)DataAddr,(socklen_t *)AddrLen); ​ uint16_t DataPort ntohs(DataAddr.sin_port);