Я не уверен, почему мой http-сервер не читает в файловом местоположении c++

Я создаю http-сервер на С ++. Я знаю, что TCPServer.h работает и этот файл / text.txt существует, но по какой-то причине код не читает текстовый файл, когда я делаю 127.0.0.1. Если вы хотите, чтобы TCPServer.h помог, просто спросите, я был бы более чем счастлив отправить его, но я просто не видел причин для этого

#include "TCPServer.h"
#include <future>
#include <fstream>
#include <WS2tcpip.h>
#include <iostream>
#define MAX_BUF (4096)
#pragma comment (lib, "ws2_32.lib")
char * getLoc(char * c) {
    char * ret = (char *)malloc(4096);
    ZeroMemory(ret, 4096);
    for(int i = 4; i < 4092; i++) {
        if (*(c + i) == ' ') {
            return ret;
        }
    else {
        *(ret + i - 4) = *(c + i);
    }
}
return ret;
}
void doStuff(SOCKET sock) {
        char * recieved = (char *)malloc(4096);
    recv(sock, recieved, 4096, 0);
    char * loc = getLoc(recieved);
    std::string fileLocation("thing");
    fileLocation += loc;
    std::ifstream fil;
    fil.open(fileLocation);
    char * contents = (char *)malloc(4096);
    ZeroMemory(contents, 4096);
    fil.read(contents, 4096);
    fil.close();
    std::cout << fileLocation;
    std::string shoot("HTTP/1.1 200 OK\n");
    shoot += contents;
    std::cout << "\n\n\n" << shoot;
    send(sock, shoot.c_str(), 4096, 0);
}
int main() {
TCPServ s;
s.createSock(80);
while (true) {
    SOCKET sock = s.listenFor();
    std::future <void> f = std::async(doStuff, sock);
}
}

Что вы имеете в виду под не читает текстовый файл? Что находится в текстовом файле? Вы уверены, что он успешно открывает файл?

Qubit 10.08.2018 15:39

Я не уверен, чб .... Я действительно не понимаю, что происходит. Путь правильный. Я это проверил, но он не выводит никаких результатов.

ICantThinkOfAUsername 10.08.2018 15:41

Хорошо, проверьте, не работает ли он при попытке открыть, если нет, то проблема не в этом. Тогда может быть важно, что находится внутри файла, если файл (по какой-либо причине) начинается с \0, тогда вы ничего не увидите, потому что shoot += contents; ничего не добавит в вашу строку.

Qubit 10.08.2018 15:46

хорошо, спасибо, это не удалось, так что я думаю, это то, над чем мне нужно поработать .... Я действительно запутался, потому что путь выглядит правильным. Я просто убеждаюсь, но C++ использует косую черту для путей к файлам, верно?

ICantThinkOfAUsername 10.08.2018 15:50

@ICantThinkOfAUsername C++ не имеет мнения о том, какие косые черты вам следует использовать, используйте все, что работает для вашей ОС

john 10.08.2018 15:51

Я считаю, что вам нужно немного почитать как о HTTP, так и о TCP / IP. TCP - это протокол потоковой передачи; Вы не можете предположить, что получаете все в recv, которое было отправлено в send. И обозначение новой строки HTTP - "\r\n".

molbdnilo 10.08.2018 15:53

Мой хрустальный шар подозревает, что ваш рабочий каталог - это не каталог, в котором находится «вещь». Не используйте относительные пути.

molbdnilo 10.08.2018 15:55

И помните, пожалуйста, свой язык, когда делитесь кодом.

molbdnilo 10.08.2018 15:56

Хорошо, попробую без рабочего каталога

ICantThinkOfAUsername 10.08.2018 15:57

О, мне жаль, я забыл, что назвал свою функцию так, я немного устал, извини

ICantThinkOfAUsername 10.08.2018 15:57

похоже, сейчас работает, спасибо, ребята. Извините за название функции

ICantThinkOfAUsername 10.08.2018 16:01
0
11
52
0

Другие вопросы по теме