Je fais mon propre serveur web simple et j'ai des fichiers texte et html à envoyer parfaitement, mais quand j'essaie d'envoyer des images, j'ai des problèmes, et je peux t le comprendre.Serveur Web en C++, comment envoyer une image
Voici ce que j'ai. Je sais que l'envoi d'un octet à la fois est inefficace, mais c'était pour les tests.
char buffer[1];
send_header(new_fd, get_file_type(file_location));
ifstream file;
file.open(temp.c_str(), ios::out | ios::binary);
while (file.good())
{
file.read(buffer, sizeof(buffer));
send(new_fd, buffer, strlen(buffer), 0);
}
Des idées? Ai-je besoin de le convertir en ordre de byte réseau avant de l'envoyer?
Merci!
En outre, si vous allez suivre cette approche, vous devez définir le tampon à quelque chose comme 4096 octets. L'utilisation d'un tampon de 1 octet entraînera des tonnes d'appels système supplémentaires, ce qui ralentira considérablement le serveur. – cdhowie
Si vous voulez vraiment être hard-core, vous pouvez mmap() le fichier manuellement, puis writev() à la fois l'en-tête et le fichier en même temps. Le sendfile() de BSD le fait pour vous; Linux est plutôt limité, donc vous devrez appeler mmap()/writev() vous-même. – chrisaycock
@cdhowie, lol Je sais que je l'utilisais pour tester certaines choses, je l'ai passé à 1024, parce que cela ne fonctionnait même pas correctement avec votre solution avec le réglage à 1. – Pieces