[Socket] Client Delphi vers Serveur Java

Résolu
Dinheru Messages postés 1019 Date d'inscription   Statut Membre Dernière intervention   -  
Dinheru Messages postés 1019 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Alors voila, j'ai un petit problème pour l'envoie de texte vers mon serveur en Java.
J'utilise le composant TClientSocket sous Delphi 4 Client/Serveur.

Pour ma connexion je fais comme ça :
    AjoutTrace('Initialisation serveur Wav');
    ClientSocket1.Host := '127.0.0.1';
    ClientSocket1.Port := 1521;
    ClientSocket1.ClientType := ctNonBlocking;
    ClientSocket1.Active := true;


Donc pour envoyer un message je fais ceci :
    ClientSocket1.Socket.SendText(str);


La connexion au serveur Java marche bien mais quand j'envoie un message ça bloque.
En fait le serveur Java utilise un BufferedReader(input) et un PrintWriter(output) et j'ai l'impression qu'il ne détecte pas ma fin de chaine.

La méthode Java permettant de recevoir les messages :
	private String Lire(){
		
		String str= null;
		if (this.connect == true)
		{
		try {
			this.output.flush();
			str = this.input.readLine();
			return str;
		} catch (IOException e) {
			
			e.printStackTrace();
			
			return "ERREUR_LIRE";
			
		}
		}
		return "ERREUR_LIRE";
	}


La méthode run du serveur Java :
public void run() {
		
		String Str = new String();
		 
		while (this.connect)	
		{
			
		 Str = this.Lire();	 
	
			if (Str.compareTo("!/deconnect/!")==0)
			{
				this.Ctrl.getIhm().Afficher(this.Nom+" : DECONNECTION");
				this.Deconnection();
				
			}
			else if(Str.startsWith("!/Nom/!"))
		 	{				
				String ancienNom = this.Nom;
				String nouveaunom = Str.substring(7);
				
				if (this.Ctrl.Recherche_Client_par_nom(nouveaunom)==-1)
				{
					this.Nom=Str.substring(7);
					this.Ctrl.getIhm().Afficher("Changement de nom de l'application :"+ancienNom +" en "+this.Nom);
					this.Ecrire(this.Nom);
					this.CreeRepertoire();
				}
				else 
				{					
					this.Ecrire(this.Nom);
				}
			}
			else
			{
				this.Ctrl.getIhm().Afficher("Message reçu :"+Str);
				this.Ecrire(this.Text_to_wav(Str));
			}
			this.nb_transformation++;
		}	
	}

Le blocage ce situe au niveau du renommage.
Je lui envoie un nom ( Tdr ) et ensuite un message( Ceci est un test ), et ça bloque. Quand je coupe mon apli Delphi je voie tout ce que j'ai envoyé qui est concaténé :
Changement de nom de l'application : Client en TdrCeci est un test



Donc si vous avez une idée de comment régler ce problème ça m'aiderais beaucoup.
Merci d'avance.
A voir également:

2 réponses

Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Salut.
Je ne connait pas grand chose en Java et Delphi, par contre, je sais que en socket il faut faire "\r\n" pour une fin de ligne. Et j'ai vu que tu utilisais un getline().
Donc, tu peux essayer en envoyant ces caractères à la fin de ta chaine.
Info, il s'agit des caractères ascii 10 et 13 si delphi ne supporte pas la notation \r\n
0
Dinheru Messages postés 1019 Date d'inscription   Statut Membre Dernière intervention   67
 
Merci ça marche maintenant ^^
J'ai rajouté les caractères de fin de ligne :
     ClientSocket1.Socket.SendText(str+#10#13);
0