[Socket] Client Delphi vers Serveur Java

Résolu/Fermé
Dinheru Messages postés 1019 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 17 avril 2009 - 16 juil. 2008 à 14:12
Dinheru Messages postés 1019 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 17 avril 2009 - 16 juil. 2008 à 15:46
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 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
16 juil. 2008 à 14:29
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 mercredi 20 avril 2005 Statut Membre Dernière intervention 17 avril 2009 67
16 juil. 2008 à 15:46
Merci ça marche maintenant ^^
J'ai rajouté les caractères de fin de ligne :
     ClientSocket1.Socket.SendText(str+#10#13);
0