Я хочу написать код на стороне сервера.Должен работать с популярными браузерами и wget.Мой сервер проверил, существует файл или нет, если он существует, браузер может загрузить его.Но у меня есть некоторые проблемы.Честно говоря, я прочитал много вопросов-ответов (например: Отправить двоичный файл в ответ HTTP, используя сокеты C ), но я не узнал.Мой браузер (Chrome) может получать текст.Но я не могу отправить двоичные данные или изображения и т. Д. Я изменяю заголовок в соответствии с загружаемыми файлами.Но я пока не могу отправить загружаемые файлы.
У меня есть несколько вопросов.
void *clientWorker(void * acceptSocket) {
int newSocket = (int) acceptSocket;
char okStatus[] = "HTTP/1.1 200 OK\r\n"
"Content-Type: text/html\r\n"
"Connection: close\r\n"
"Content-Length: 20\r\n"
"\r\n"
"s";
writeLn(newSocket, okStatus);
const char * fileName = "/home/tyra/Desktop/example.txt";
sendF(newSocket, fileName);
}
1- Если я не напишу "s" или что-то еще вokStatus
, мое сообщение не может быть отправлено.Я ничего не понимаю в этом.
Это writeLn
функция:
void writeLn(int acceptSocket, const char * buffer) {
int n = write(acceptSocket, buffer, strlen(buffer) - 1);
if (n < 0) {
error("Error while writing");
}
}
Это sendF
функция:
string buffer;
string line;
ifstream myfile(fileName);
struct stat filestatus;
stat(fileName, &filestatus);
int fsize = filestatus.st_size;
if (myfile.is_open()) {
while (myfile.good()) {
getline(myfile, line);
buffer.append(line);
}
cout << buffer << endl;
}
writeLn(acceptSocket, buffer.c_str());
cout << fsize << " bytes\n";
Немного грязно,Я еще не использовал размер файла.Если я отправляю файл, я переставляю эти вещи.
2- Я могу отправить текст, и браузер демонстрирует его, но браузер не понимает новых строк.Если текстовый файл содержит (123 \ n456 \ n789), браузер демонстрирует (123456789).Я думаю, что я должен изменить заголовок Content-Type, но я не узнал.
Я не хочу, чтобы браузер отображал текстовые файлы.Браузер должен скачать его.Как я могу отправить загружаемые файлы?
Извините, я все объясняю довольно сложно.