ftp客户端编程中文件上传的问题(附代码)

发布于 2022-07-20 12:03:54 字数 6123 浏览 32 评论 3

第一次写ftp客户端,有些地方不太懂,大家多指点指点

#define MAX_DATASIZE 1000
#define SERVER_PORT 21
#define FTP_DATA_PORT 20
#define SERVER_ADDR "192.168.12.239"

int result;
int recvnum;
char buf[MAX_DATASIZE];

void sendcmd(int sock_ftp, char *str);

main(int argc, char *argv[], char *env[])
{
        int sock_ftp;
        struct sockaddr_in server_addr;
        struct sockaddr_in client_addr;
        int i = 0;
        char *str;
       
        sock_ftp = socket(AF_INET, SOCK_STREAM, 0);
        if(sock_ftp == -1)
        {
                perror("sock";
                exit(1);
        }
       
        server_addr.sin_family = AF_INET;
        server_addr.sin_port = htons(SERVER_PORT);
        server_addr.sin_addr.s_addr = inet_addr(SERVER_ADDR);
        bzero(&(server_addr.sin_zero),;
       
        result = connect(sock_ftp, (struct sockaddr*)&server_addr, sizeof(struct sockaddr));
        if(result == -1)
        {
               
        }
       
        memset(buf, 0, sizeof(buf));
        recvnum = recv(sock_ftp, buf ,MAX_DATASIZE, 0);
        if( recvnum == -1)
        {
                perror("recv";
                exit(1);
        }
        #ifdef DEBUG
                printf("answer of connect is: %sn",buf);
        #endif       
               
        str = "USER mmrn";
        sendcmd(sock_ftp, str);
       
        str = "ASS ilovemmrn";
        sendcmd(sock_ftp, str);
       
        str = "TYPE Irn";
        sendcmd(sock_ftp, str);
               
        str = "ASVrn";
        sendcmd(sock_ftp, str);       
                       
        str = "ORT 192,168,12,231,4,150rn";
        sendcmd(sock_ftp, str);       
               
//        str = "WDrn";
//        sendcmd(sock_ftp, str);
       
//        str = "LIST client.crn";
//        sendcmd(sock_ftp, str);
       
        str = "STOR ee.docrn";
        sendcmd(sock_ftp, str);
        int fd;
                 运行没有错误,但是服务器端只是有个ee。doc的文件,大小为0。是不是这个命令只创建文件名,而具体的文件传输另外写代码。下面具体改怎么做?谢谢

       
}

void sendcmd(int sock_ftp, char *str)
{
        memcpy(buf, str, strlen(str));
        result = send(sock_ftp, buf, strlen(str), 0);
        if(result == -1)
        {
               
        }
       
        memset(buf, 0, sizeof(buf));
        recvnum = recv(sock_ftp, buf ,MAX_DATASIZE, 0);
        if( recvnum == -1)
        {
                perror("recv";
                exit(1);
        }
        #ifdef DEBUG
                printf("answer of send is: %sn",buf);
        #endif       
        return;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

牵你手 2022-07-24 09:30:38

原帖由 Randylu 于 2006-7-2 09:44 发表
谢谢上面的回答
我在论坛里也搜索了相关ftp编程问题的帖子,大部分都是这种回答
我觉得论坛里总是有类似的答案不太好
我也是看了《tcp ip详解》以及ftp协议的书籍后才按照自己的理解编的
但是理解协议和编出代 ...

这个问题其实可以非常简单的回答你.

光发个协议号 是没用的.实际文件没有传过去.

猛虎独行 2022-07-24 05:35:06

谢谢上面的回答
我在论坛里也搜索了相关ftp编程问题的帖子,大部分都是这种回答
我觉得论坛里总是有类似的答案不太好
我也是看了《tcp ip详解》以及ftp协议的书籍后才按照自己的理解编的
但是理解协议和编出代码是两回事,有时候你按照协议来编,很可能一个小地方错误就老是实现不了
所以,我希望各位在给出建议的同时也给出问题的解决方法,不要只是这样简单的一句话
很多编程的入门人员不肯能达到,看懂协议就能编的出来的境界的

梦断已成空 2022-07-22 17:30:46

最好的办法还是看看RFC文档吧.

http://www.ietf.org/rfc/rfc959.txt

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文