| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 302 人关注过本帖
标题:linux下编写ftp文件服务器问题,求高手
只看楼主 加入收藏
吴鹏博
Rank: 1
等 级:新手上路
帖 子:9
专家分:6
注 册:2013-9-27
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:1 
linux下编写ftp文件服务器问题,求高手
为什么我用客户端登入输入list 没有显示文件呢?
我程序没有写完呢,才写到list 就编不过去了。。。找了好久没找到错误。
myftps.c
程序代码:
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include "mynetlib.h"
#include <string.h>
#include <sys/wait.h>
#include <signal.h>
#include <dirent.h>

#define N 512

void js(int sign)
{
    while(waitpid(-1,NULL,WNOHANG) > 0)
    {
    }
}
void list(int sockfdc)
{
    DIR *dir;
    struct dirent *dirent;

    dir = opendir("~/workdir/net");
    while((dirent = readdir(dir)) != NULL)
    {
        if(strcmp(dirent->d_name,".") == 0 || strcmp(dirent->d_name,"..") == 0)
        {
            continue;
        }
        send(sockfdc,dirent->d_name,N,0);
    }
    closedir(dir);
}

int main(int argc,char **argv)
{    
    int sockfds,sockfdc;
    char buf[N];
    struct sockaddr_in s,c;
    ssize_t n;
    socklen_t clen;
    
    signal(SIGCHLD,js);

    sockfds = Socket(PF_INET,SOCK_STREAM,0);
    
    s.sin_family = PF_INET;
    s.sin_port = htons(atoi(argv[2]));
    s.sin_addr.s_addr = inet_addr(argv[1]);

    Bind(sockfds,(struct sockaddr *)&s,sizeof(s));
    
    Listen(sockfds,10);
    
    while(1)
    {    
        clen = sizeof(c);

        sockfdc = Accept(sockfds,(struct sockaddr*)&c,&clen);

        printf("enter!!! >>>>> %s\n",inet_ntoa(c.sin_addr));
        
        if(fork() == 0 )
        {    
            close(sockfds);
            while((n = Recv(sockfdc,buf,N,0)) != 0)
            {
                if(strcmp(buf,"list") == 0)    
                {
                    list(sockfdc);
                    break;
                }
            }
            close(sockfdc);
            printf("exit!!! >>>>> %s\n",inet_ntoa(c.sin_addr));
            exit(0);
        }
        close(sockfdc);
    }
    return 0;
}



myftpc.c
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <errno.h>
#include "mynetlib.h"
#include <arpa/inet.h>

#define N 512

void help(void)
{
    printf("*****************************************\n");
    printf("myftpc\t1.0\n");
    printf("help\tprintf help information\n");
    printf("quit\texit mytftpc\n");
    printf("*****************************************\n");
}

void list(struct sockaddr_in *s)
{    
    int sockfdc;
    char buf[N] = {};
    
    sockfdc = Socket(PF_INET,SOCK_STREAM,0);

    Connect(sockfdc,(struct sockaddr *)s,sizeof(struct sockaddr_in));
    
    strcpy(buf,"list");
    Send(sockfdc,buf,N,0);

    while(Recv(sockfdc,buf,N,0) != 0)
    {
        printf("%s ",buf);
    }
    printf("\n");
    close(sockfdc);
}

int main(int argc,char **argv)
{    
    struct sockaddr_in s;
    char buf[N];
    
    s.sin_family = PF_INET;
    s.sin_port = htons(atoi(argv[2]));
    s.sin_addr.s_addr = inet_addr(argv[1]);
    
    while(1)
    {
        printf("myftp>");
        fgets(buf,N,stdin);
        buf[strlen(buf)-1] = '\0';

        if(strcmp(buf,"help") == 0)
        {
            help();
            continue;
        }
        if(strcmp(buf,"quit") == 0)
        {
            exit(0);
        }
        if(strcmp(buf,"list") == 0)
        {
            list(&s);
            continue;
        }
    }

    return 0;
}


[ 本帖最后由 吴鹏博 于 2013-11-6 20:54 编辑 ]
2013-11-06 20:52
zhaogay
Rank: 7Rank: 7Rank: 7
来 自:宫
等 级:黑侠
帖 子:151
专家分:586
注 册:2013-10-10
收藏
得分:20 
dir = opendir("~/workdir/net");不支持父目录这个字符,换成绝对路径或者相对路径试试。

好好学习,天天想上
2013-11-06 21:30
快速回复:linux下编写ftp文件服务器问题,求高手
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018207 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved