2009-07-01 6 views
0

J'ai créé un programme serveur qui envoie un fichier image au client. Mon programme fonctionne correctement si l'image est de 512 octets. Mais ça ne marche pas bien pour les gros fichiers.Comment envoyer un fichier image sur un réseau à l'aide du canal socket

Dans ce cas, je ne reçois pas l'image exacte que je suis censé obtenir. signifie que mon image récupérée est d'une manière incorrecte. Donc, comment résoudre ce problème

J'utilise java socket channel et java nio dans le serveur tout en étant simple socket côté client.

Merci Sunil

Répondre

1

Voici votre bug:

while(fileChannel.read(buffer)>0) 

La méthode read() remplira pas nécessairement le tampon; il lira un nombre arbitraire d'octets et retournera ce nombre. Vous devez tenir compte du fait qu'il lit moins que la capacité du tampon et n'écrivez que plusieurs octets, ce qui est également nécessaire car la taille du fichier n'est pas nécessairement un multiple de votre taille de tampon et la dernière lecture ne remplira presque jamais le tampon .

La même chose est vraie du côté client - available() n'est pas utile ici, il vous suffit de lire et de gérer les nombreux octets que vous avez.

0

Je ne vous vois pas vider et fermer votre flux de sortie côté client. Lorsque vous éclatez, vous devez fermer() le flux de sortie, et toutes les données mises en cache seront écrites dans le fichier.