2015-04-05 2 views
1

Я создаю сервер сокетов, который, например, будет использоваться с использованием ввода типа «localhost: 8080/WWW/index.html», и он вернет файл index.html. Я могу разобрать запрос, чтобы, когда кто-то вводит, что у меня будет буфер «/WWW/index.html» и из местоположения моей программы, если я сделал vim /WWW/index.html, я бы открыл, если по какой-то причине мой код всегда говорит, что файл не найден. Вот следующий код ...Файл C никогда не был найден

char* parseRequest(char* request) { 
    //assume file paths are no more than 256 bytes + 1 for null. 
    char *buffer = malloc(sizeof(char)*257); 
    memset(buffer, 0, 257); 

    if(fnmatch("GET * HTTP/1.*", request, 0)) return 0; 

    sscanf(request, "GET %s HTTP/1.", buffer); 
    return buffer; 
} 

int fileExists(const char *fname){ 
     FILE *file; 
     if(file = fopen(fname, "r")) 
     { 
       fclose(file); 
       return 1; 
     } 
     return 0; 
} 


     recv(sock,buffer,255,0); 
     //reading inputted directory 
     char *dir = parseRequest(buffer); 
     if(fileExists(dir) == 1){ 
       send(sock, "File found", 200, 0); 
     }else{ 
       send(sock, "404: File not found", 200, 0); 
     } 
+0

опубликованный код пытается получить доступ к, для чтения, веб-странице: index.html. Если сервер не работает очень плохо, сервер должен лишить клиента доступа к чтению файла index.html. Существует определенная область, обычно/должна быть настроена на сервере, где клиенту разрешен доступ к файлам. Все остальные каталоги/файлы должны быть настроены с привилегиями «deny». – user3629249

ответ

2

Где dir равно "/WWW/index.html"

#define MAXBUF 256 
#define DOCUMENTS_ROOT "/home/longbear/hw4" 

char path[MAXBUF] = DOCUMENTS_ROOT; 
strcat(path, dir); 

. . .

: вы должны уметь открыть файл по адресу path.

+0

Хорошо, они могут быть полезны в будущем, когда я могу открыть сами файлы, но я не вижу, как это поможет мне открыть эти файлы или проверить, существуют ли они. –

+0

А, я уже пробовал делать все пути. Прежде чем сервер будет смотреть на ~/hw4/WWW/index.html вместо просто /WWW/index.html, но это не помогло. Я конкатенировал «~/hw4» и «/WWWWindex.html» вместе для достижения этого –

+0

Текущий рабочий каталог is/home/longbear/hw4 –

Смежные вопросы