使recv()阻塞,直到服务器收到用户输入

时间:2013-11-11 09:09:10

标签: c sockets ftp

我是C&插座新手。 我在C中编写了一个简单的ftp服务器和客户端。最初它有效,但是当我向pwd添加一个选项时,它就崩溃了。它不是服务器等待键盘输入,而是在没有输入的情况下运行。我正在使用默认设置,因此它应该阻止。另外,我已经将MSG_WAITALL添加到我的recv()中,但没有任何变化。我做错了什么?

后面是相关的服务器代码(这是为客户端生成文件列表然后等待通过客户端输入传输文件名的部分)。

            //wait for ls command
        if ((numbytes = recv(new_fd, buf, MAXDATASIZE - 1, 0)) == -1) {
            perror("recv");
            exit(1);
        }
        //remove newline from fgets
        strip_newline(buf, sizeof(buf));
        int result = strncmp(cmd, buf, 2);

        if (result == 0){
            //list files
            file = fopen ("temp", "wb");    //we store our file listing in this temp file
            char cmd_buffer[LENGTH];
            dp = opendir ("./");
            if (dp != NULL){
                while (ep = readdir (dp))
                    fprintf(file, "%s\n", ep->d_name);
                (void) closedir (dp);
            }else
                perror ("Couldn't open the directory");   

            //send our list down the wire
            fclose(file);
            file = fopen ("temp", "rb");
            bzero(buffer, LENGTH);
            while ((res = fread(buffer, sizeof(char), LENGTH, file)) > 0){
                if(send(new_fd, buffer, res, 0) < 0){
                    fprintf(stderr, "ERROR: Failed to send file %s. (errno = %d)\n", buf, errno);
                    break;
                }
                bzero(buffer, LENGTH);
            }
            fclose(file);

            //read filename
            if ((numbytes = recv(new_fd, buf, MAXDATASIZE - 1, MSG_WAITALL)) == -1) {
                perror("recv");
                exit(1);
            }
            //remove newline from fgets
            strip_newline(buf, sizeof(buf));
            printf("Trying to open %s\n", buf);

0 个答案:

没有答案