C - Socket : Programmation Client/Serveur Application pour envoyer un fichier
Je veux programmer une application pour envoyer un fichier avec des sockets:
Ici mon Serveur:
void str_server(int sock)
{
char buf[1025];
const char* filename="test.text";
FILE *file = fopen(filename, "rb");
err_abort("Test");
while (!feof(file))
{
int rval = fread(buf, 1, sizeof(buf), file);
send(sock, buf, rval, 0);
}
}
et voici mon client:
void RecvFile(int sock, const char* filename)
{
int rval;
char buf[0x1000];
FILE *file = fopen(filename, "wb");
while ((rval = recv(sock, buf, sizeof(buf), 0)) > 0)
{
fwrite(buf, 1, rval, file);
}
close(sock);
}
Mon problème est que mon client créez un fichier....mais ne pas écrire le contenu dans le fichier!
A part cela, vous n'avez pas besoin de lire chaque octet et l'envoyer en bas de la douille. Vous avez pu lire l'ensemble de la chaîne de caractères dans un tampon et de l'envoyer(..) d'un seul coup. Au sujet de votre problème, avez-vous fermer le fichier avant de le vérifier?
OriginalL'auteur JavaNullPointer | 2012-03-26
Vous devez vous connecter pour publier un commentaire.
Ajouter une gestion d'erreur dans votre code, cela devrait vous aider à repérer le problème. Notez également que
send()
,recv()
,fread()
etfwrite()
ne sont pas garantis pour écrire/lire l'intégralité de la mémoire tampon que vous spécifiez, de sorte que vous devriez prendre en considération aussi bien.Aussi, depuis, le protocole TCP est un flux d'octets, le serveur doit indiquer le moment où le fichier se termine ainsi, le client sait quand s'arrêter de lire. Si vous n'envoyez pas de la taille du fichier avant d'envoyer le fichier, la seule option est de fermer le socket lorsque le transfert est terminé.
Essayer quelque chose comme cela:
J'ai fait quelques mises à jour
si vous venez de supprimer la boucle externe? et changer la condition ainsi
pourquoi vous avez supprimé décalage? Semble ne fonctionnera pas pour les gros fichiers ayant len plus de tampon
Le code fonctionne toujours pour les gros fichiers. Boucles externes existent encore de lire des fichiers fixe à l'aide de tampons. J'ai juste refait le code pour extraire les boucles internes propres à leurs fonctions lors de l'écriture de chaque tampon à la cible, et le décalage logique n'était pas plus nécessaire.
OriginalL'auteur Remy Lebeau