Bonjour,
j'ai un petit soucis conceptuel

Voilà, je dois faire un client / serveur capable d'envoyer des fichiers. J'étais donc parti sur l'idée d'envoyer mon fichier par trame de 1 ko selon le principe suivant :
Serveur envoie 1 Ko
Client traite les données puis envoie un accusé de réception (message "ok")
Serveur reçoit le message ok puis renvoie 1 ko
et ainsi de suite jusqu'à la fin.
Tout allait bien, les tests en local montraient des débits de 1 à 3 Mo/s ce qui était satisfaisant mais voilà.. sur internet c'est une toute autre histoire.
En effet, envoyer les données et recevoir l'accusé de réception prends environ 70 ms (à peine plus qu'un ping); du coup, je ne peux envoyer qu'une quinzaine de trame à la seconde soit un débit de .. 15 ko/s ce qui n'est pas acceptable.
Alors j'ai bien essayer de supprimer l'accusé de réception, le serveur envoie en boucle sans arrêt mais là curieusement, les données reçues côté client ne correspondent pas à ce qui a été envoyé; même problème si au lieu d'envoyer une trame de 1 ko, je l'aggrandit à 5...
Mes trames sont formées de la manière suivante :
Taille de la trame codée sur les 4 premiers bytes
Données de la trame codées sur le reste
Quand je dis que les données reçues ôté client ne correspondent pas à ce qui a été envoyé, je le vois du fait que la taille récupérée est complètement aberrante, le problème ne vient pas du fait qu'une trame soit reçue avant les trames précédentes (on sait pas ce qui peut se passer dans un réseau, mais c'est un problème que je gèrerai plus tard).
J'en viens donc à ma question, j'utilise des BufferedIn(Out)putStream, comment faire pour au choix
- augmenter la taille d'une trame
- s'assurer que les données reçues soit bien les données envoyées
Ou sinon, plus généralement, comment on fait un client/serveur de fichier correct?

Merci d'avance
