Я получаю следующий результат:
M-^IPNG^M$
^Z$
IHDR^H^FM-tM-.M-F^DsBIT^H^H^H^H|^HdM-^H^YtEXtSoftwaregnome-screenshotM- o^CM-?>tEXtCreation TimeSat 26 октября 2024 г. 19:34:33 CEST^KuM-8M-:IDAT^HM-^YcM-|M-^?M-^?M-^?^?^F$M -@M-DM-^@^F0^D$
^D^BM-FuV4ENDM-.B`M-^B
Но контент, который я должен получить:
M-^IPNG^M$
^Z$
^@^@^@^ MIHDR^@^@^@^D^@^@^@^C^H^F^@^@^@M-4M-tM-.M-F^@^@^@^DsBIT^H^H^H^ H|^HdM-^H^@^@^@^YtEXtSoftware^@gnome-screenshotM-o^CM-?>^@^@^@.tEXtCreation Time^@Сб, 26 октября 2024 г., 19:34:33 CEST^ КуМ-8М-:^@^@^@^UIDAT^HM-^YcM-|M-^?M-^?M-^?^?^F$M-@M-DM-^@^F0^D ^@M-B$
^D^BM-FuV4^@^@^@^@IENDM-.B`M-^B
Кроме того, когда я смотрю в браузере, на вкладке «Сеть» я вижу, что получаю контент таким, каким он должен быть, но тогда функция «recv/read» не считывает недостающие байты (показано в выводе, который я получаю) < /p>
Это код, который получает контент и отправляет его по запросу POST/GET/DELETE. Пожалуйста, не комментируйте "Почему вы так написали. методы должны....". Мне только нужно понять, почему чтение/получение не получает все байты. Также пробовал с большим номером чтения в «charuffer[2]». ничего не меняет.
Код: Выделить всё
std::size_t len(char *str) {
int i = 0;
while (str[i++]);
return i;
}
static char *add(char *buffer, char *to_add) {
char *returning = (char *)malloc(len(buffer) + 3);
int i = 0;
while (buffer[i]) {
returning[i] = buffer[i];
i++;
}
free(buffer);
returning[i++] = to_add[0];
returning[i++] = to_add[1];
returning[i] = 0;
return returning;
}
void Webserv::run(int socket) {
struct sockaddr_in client_addr;
socklen_t client_len = sizeof(client_addr);
int response_content = 0;
char buffer[2];
int client_socket;
char *buff;
std::string request;
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79131388/http-server-in-c98-recv-read-not-receiving-correct-data-tcp[/url]
Мобильная версия