Problème application client/server, envoie et reception de bytes

Problème application client/server, envoie et reception de bytes - Java - Programmation

Marsh Posté le 21-02-2009 à 19:07:10    

Bonjour,  
 
je veux réaliser une application permettant l'échange de fichier entre client et server. Pour l'instant, mon application permet d'envoyer un fichier d'un client à un server, par contre avant l'envoi du fichier je veux envoyer une sorte de message pour dire au server de se préparé à la réception.
Mon problème vient de la reception de celui-ci par le server.  
(Toute mes données sont envoyées en bytes)
 
Client:
 
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket = new Socket("localhost", 10001);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
 
String action = inFromUser.readLine();
outToServer.writeBytes(action);
 
Server :
 
private DataOutputStream sortie; // pour gestion du flux de sortie
private InputStream entree; // pour gestion du flux d'entrée
...
sortie = new DataOutputStream(sock.getOutputStream());
entree = (sock.getInputStream());
...
byte []buffer_action = new byte[1024];
String mess;  
entree.read(buffer_action,0,buffer_action.length);  
mess = new String(buffer_action,0,buffer_action.length);
System.out.println(mess);
new ReceptFichier(nomfichier,sortie,entree); //recupération du fichier
 
Si j'entre 15, l'affichage m'écrit un 1 avec plein de carrée à la suite ... et le 5 lui est envoyé dans mon fichier crée. Quelqu'un pourrait m'expliquer pourquoi je ne récupère pas 15 en entier ?
(l'envoie du fichier marche très bien, c'est juste mon message qui rate...).
 
Merci .

Reply

Marsh Posté le 21-02-2009 à 19:07:10   

Reply

Marsh Posté le 21-02-2009 à 23:54:54    

Franchement ... je ne vois pas. Peut-être un problème d'encodage de caractère ?
Sinon, tu fais un read de 1024 octets, tu risque de lire (pour afficher) plus que ce que l'utilisateur aura entré au clavier et une partie du fichier (ou l'inverse ...)


---------------
By bob.
Reply

Marsh Posté le 23-02-2009 à 08:56:47    

En lisant la javadoc, il semble que si tu envoies des données avec un DataOutputStream, il faut les récupérer avec un DataInputStream.

Reply

Marsh Posté le 26-03-2009 à 13:44:40    

coté client  
import java.io.*;
import java.net.*;
 
class ClientTCP  
{
 
    public static void main(String argv[]) throws Exception
    {
 
String phraseModifiee;
 
//Créer le flux d'entrée
BufferedReader entreeDepuisUtilisateur =new BufferedReader(new InputStreamReader(System.in));
 
//Créer la socket client,la connecter au serveur
Socket socketClient = new Socket("localhost", 6789);
 
//Créer le flux de sortie attaché à la socket
DataOutputStream sortieVersServeur = new DataOutputStream(socketClient.getOutputStream());
 
//Créer le flux d'entrée attaché à la socket
BufferedReader entreeDepuisServeur =new BufferedReader(new InputStreamReader(socketClient.getInputStream()));
 
//Lire la chaîne  entrée depuis le client
String sentence = entreeDepuisUtilisateur.readLine();
System.out.println(sentence);
 
//Envoyer la chaîne au serveur
 sortieVersServeur.writeBytes(sentence + "\n" );
 
//Lire la chaîne depuis le serveur
phraseModifiee = entreeDepuisServeur.readLine();
System.out.println("RECU DU SERVEUR: " + phraseModifiee);
socketClient.close();
}
}
 
 
coté serveur
import java.io.*;
import java.net.*;
 
class ServeurTCP  
{
 
     public static void main(String argv[]) throws Exception
    {
 
String phraseClient;
String phraseMajuscule;
 
//Créer une socket d'écoute sur le port 6789
ServerSocket socketEcoute = new ServerSocket(6789);
 
while(true) { // boucle infinie
 
//Attendre une connexion d'un client
Socket socketConnexion = socketEcoute.accept();
 
//Créer le flux d'entrée attaché à la socket
BufferedReader entreeDepuisClient =new BufferedReader(new InputStreamReader(socketConnexion.getInputStream()));
 
//Créer le flux de sortie attaché à la socket
DataOutputStream sortieVersClient = new DataOutputStream(socketConnexion.getOutputStream());
 
//Lire la chaîne depuis la socket
phraseClient = entreeDepuisClient.readLine();
 
System.out.println("phrase depuis client:"+ phraseClient);
phraseMajuscule = phraseClient.toUpperCase() + '\n';  
System.out.println("phrase vers client (après modification):"+phraseMajuscule );
 
//Ecrire au client
sortieVersClient.writeBytes(phraseMajuscule);
} // fin boucle (repartir et attendre une nouvelle connexion)
}}

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed