首页 > 其他分享 >socket访问ftp服务器

socket访问ftp服务器

时间:2023-10-19 23:57:33浏览次数:41  
标签:ftp socket errno serverAddr 服务器 include define

原理:ftp协议是基于tcpip协议,用socket实现tcpip协议发送ftp指令、内容

 

IP地址转换函数 inet_pton是一个IP地址转换函数,可以在将点分文本的IP地址转换为二进制网络字节序”的IP地址,而且inet_pton和inet_ntop这2个函数能够处理ipv4和ipv6。   strerror:  C语言错误提示函数:strerror和errno 相关头文件: string.h errno.h 函数原型: char*strerror(interrnum); errnum是错误的编号,要通过“errno”来获得       代码实现功能:socket连接ftp服务器21端口,发送登录账号密码命令,登录成功 代码:
 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

#define IPV4_PROTO     AF_INET
#define SOCKET_TYPE    SOCK_STREAM
#define protocol       IPPROTO
#define FTP_PORT       21
  

#define BUFF_LEN       4096

//return -1 connect failed -2 send failed  -3 recv failed 
//usage   pratise socket ftp
int main(int argc, char **argv)
{
    int sockFd = 0;
    int ret    = 0;

    char buf[BUFF_LEN]={0};
    struct sockaddr_in serverAddr;

    if(argc != 2)
    {
        return -1;
    }

    for(int i = 0; i < argc; i++)
    {
        printf("%s ", argv[i]);
    } 
    printf("\n");
    if( (sockFd = socket(AF_INET, SOCK_STREAM, 0)) < 0){
        printf("create socket error: %s(errno: %d)\n", strerror(errno),errno);
        exit(0);
    }

    memset(&serverAddr, 0, sizeof(serverAddr));
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_port = htons(21);
    if( inet_pton(AF_INET, argv[1], &serverAddr.sin_addr) <= 0){
        printf("inet_pton error for %s\n",argv[1]);
        return -1;
    }

 
    if( connect(sockFd, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) < 0)
    {
        printf("connect error: %s(errno: %d)\n",strerror(errno),errno);
        return -1;
    }
    if((ret = recv(sockFd, buf, BUFF_LEN,0)) == -1) 
    {
        perror("recv error");
        return -3;
    }
    buf[ret]  = '\0';
    printf("Received : %s ",buf);

    printf("send msg to server: \n");
    char user[] = "user ftpusr\r\n";
    char passwd[] = "pass 123456aB\r\n";
    if( send(sockFd, user, strlen(user), 0) < 0)
    {
        printf("send msg error: %s(errno: %d)\n", strerror(errno), errno);
        return -2;
    }
    printf("send : %s\n",user);
    if((ret = recv(sockFd, buf, BUFF_LEN,0)) == -1) 
    {
        perror("recv error");
        return -3;
    }
    buf[ret]  = '\0';
    printf("Received : %s ",buf);
    if( send(sockFd, passwd, strlen(passwd), 0) < 0)
    {
        printf("send msg error: %s(errno: %d)\n", strerror(errno), errno);
        return -2;
    }
    printf("send : %s\n",passwd);

    if((ret = recv(sockFd, buf, BUFF_LEN,0)) == -1) 
    {
        perror("recv error");
        return -3;
    }
    buf[ret]  = '\0';
    printf("Received : %s ",buf);
    
    close(sockFd);
    return 0;
}

  





标签:ftp,socket,errno,serverAddr,服务器,include,define
From: https://www.cnblogs.com/cppdevellog/p/17771047.html

相关文章

  • 10月19日略微升级的服务器和客户端
    目录略微升级的服务器和客户端略微升级的服务器和客户端和之前那个的区别点在于服务器可以一直接受客户端的数据服务器代码如下importsocket#生成一个socket对象soc=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#绑定地址跟端口号soc.bind(('172.17.8.49',8......
  • 记一次在服务器上运行node.js程序时无法通过nohup xxx & 方式挂起的问题
       由于业务需求每天要在服务器上整理一组数据,为了方便就用node.js来写了。但是运行的时候发现了一个问题明明使用了nohupmain.js&的方式后台运行了程序但是一旦我关闭了shell控制台这个后台运行的程序也会跟着终止掉,不知道是什么原因,于是采用forever.js的方式来运行......
  • k8s中服务器重启后,provisioner制备区异常
    kubectllogs-fopenebs-localpv-provisioner-77886fbccd-fbv8k-nopenebsF101906:43:35.9089841provisioner.go:247]Errorgettingserverversion:Get"https://10.96.0.1:443/version?timeout=32s":dialtcp10.96.0.1:443:i/otimeout......
  • 2023.10.19值得推荐的一款服务器空间
    ,已经体验一个月咯,非常不错的免费资源,适合大家去了解了解~!他们家的免费空间,免费服务器,非常稳定,非常靠谱,值得拥有,价格厚道~!免备案服务,域名管理等等服务,应有尽有,2023年你值得了解,他们家的免费云服务器还是独立IP的哦,非常非常好,非常NICE~!官网地址:https://www.sanfengyun.com......
  • 和鲸ModelWhale与中科可控X系列异构加速服务器完成适配认证,搭载海光芯片,构筑AI算力底
    AIGC时代,算力作为新型生产力,是国家和企业构建竞争优势的关键。而随着传统计算方式无法满足新时代激增的算力需求,计算场景的多元化和计算应用的复杂化推动了CPU+GPU异构平台的加速组建。在此全球激烈角逐的大趋势下,我国信创产业链各厂商应形成良好的产业协作与互动机制,加强基础设......
  • 两种方法,轻松完成 Telerik Reporting REST 服务和报表服务器的切换!
    TelerikReporting拥有直观、无代码的Win、网页与PDF报表的创建功能,直观的设计与具有特定风格的报表,无代码数据打包、向导、语法开发工具、自动操作。分类整理、过滤、有条件格式化、转化器格式,活动报表,水晶报表,附加报表。本文主要目的是展示在这两种呈现报表的方法(TelerikRepo......
  • linux系统安装ftp记录
    使用的是yum工具安装ftp服务器1.首先安装ftp-0.17-89.el9.x86_64,这个不是ftp服务器程序,只是ftp访问工具:yuminstall-yftp2.安装vsftpd,ftp服务程序:yuminstall-y vsftpd启动服务:       systemctlstartvsftpd.service随系统启动:       ......
  • 14.11 Socket 基于时间加密通信
    在之前的代码中我们并没有对套接字进行加密,在未加密状态下我们所有的通信内容都是明文传输的,这种方式在学习时可以使用但在真正的开发环境中必须要对数据包进行加密,此处笔者将演示一种基于时间的加密方法,该加密方法的优势是数据包每次发送均不一致,但数据包内的内容是一致的,当抓包......
  • WebSocket API 解析:从入门到精通
    WebSocketAPI详解WebSocketAPI是HTML5标准化之后的一项 API,它可用于建立客户端和服务器之间的双向通信连接。WebSocket构造函数用于创建并返回一个 WebSocket 对象。示例://创建WebSocket对象,并指定服务端地址varws=newWebSocket("ws://localhost:8080");WebSocket.r......
  • Nginx 服务器 SSL 证书安装部署
    工具:WinSCP、putty下载证书cloud.tencent.com_bundle.crt证书文件cloud.tencent.com_bundle.pem证书文件cloud.tencent.com.key私钥文件cloud.tencent.com.csrCSR文件上传证书到服务器通过WinSCP将已获取到的cloud.tencent.com_bundle.crt或cloud.tencent.com_......