Problème application client/server, envoie et reception de bytes - Java - Programmation
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 ...)
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.
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)
}}
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 .