Я создаю простой сервер Unix, написанный на C ++, который просто ожидает входящих соединений, а затем, когда соединение установлено, отправляет запрошенные данные обратно в браузер клиента для отображения. У меня все работает, кроме отправки данных клиенту. Вот как это должно работать:
Я запускаю сервер и задаю номер порта (для этого примера я буду использовать 8181).
Клиент открывает браузер и подключается к моему серверу, расположенному по адресу http://server.mysite.com:8181/test.txt, и пытается извлечь test.txt для просмотра.
Сервер принимает входящее соединение. Он проверяет, существует ли файл. Если файл существует, он отправляет файл в браузер для просмотра.
Моя проблема в том, что я не уверен, как отправить данные обратно в браузер для просмотра. Я пытаюсь использовать системные вызовы Unix, чтобы добиться этого, так как считаю, что это все, что нужно для возврата данных.
Прямо сейчас все, что я делаю, это чтение () из файла в буфер массива символов и затем подача этого в команду write (socketID, buffer, strlen (buffer)). Когда я проверяю его, сервер правильно находит файл и считывает данные в буфер массива char, но команда write () каждый раз возвращает значение ошибки -1.
Я хотел бы получить его там, где подключен браузер, и затем иметь возможность просматривать text.txt в браузере, а также поддерживаемые браузером графические форматы.
Есть ли какой-нибудь способ обойти часть «чтение в буфер, затем запись этого буфера в сокет» и просто каким-то образом отправить файл прямо в браузер? Вот часть кода, с которым я сейчас работаю. Я только что прокомментировал другие части кода.
//create and bind socket. call listen()...
conn_socket = accept(socketInt, (struct sockaddr *)&caddr, (socklen_t *) &caddrLength);
recvInt = recv(conn_socket, requestedFileBuffer, 1023, 0);
if(recvInt > 0){
//checks to see that the requestd file exists and correctly
//reads that file into char array "buffer"
int writeInt = write(recvInt, buffer, strlen(buffer));//This is not working
cout << "writeInt is: " << writeInt << endl;// returns -1
}//end if
У кого-нибудь есть предложения? Если вам нужно, чтобы я опубликовал больше кода, я был бы рад сделать это, но я считаю, что проблема заключается в приведенном выше коде.
Спасибо за ваше время.