Client/serveur

Fermé
adamsjilal Messages postés 46 Date d'inscription lundi 14 mars 2016 Statut Membre Dernière intervention 29 avril 2018 - 27 nov. 2017 à 11:52
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 27 nov. 2017 à 22:45
Bonsoir,
j'ai un petit client serveur a mettre en place et je crois que je suis enfin blocker sur point selon lequel
j'arrive pas a assurer la communication en terme de String j'essayé avec de calcule et ca a marcher mais j'arrive pas faire echanger mes programme des chaine caractere. bon mon but etait de demander au client de devinner les lettre d'un mot pris au hasard ou aleatoirement par le serveur, du coup le client donne chaque fois un caractere et le serveur verifie si le caractere donnée par le client se trouve bien dans le mot, si oui le serveur redemande encore les lettre restant et sinon il dit dit que c'est faut et au bout de cinq essaies s'il n'arrive pas a trouver on lui decalare perdant.
pour cela j'ai mis en place l'application serveur
public static void lancer() {
		int nbreEssaye = 5;
		try {
			ServerSocket ss = new ServerSocket(1569);
			System.out.println("j'attend une connection...");
			Socket s = ss.accept();
			System.out.println("connection succès!");
			InputStream in = s.getInputStream();
			InputStreamReader streamreader = new InputStreamReader(in);
			BufferedReader lecteur = new BufferedReader(streamreader);
			OutputStream sortie = s.getOutputStream();
			PrintWriter pw = new PrintWriter(sortie, true);
			System.out.println("j'attend un caractere:");
			String chaine = lecteur.readLine();
			String mot = anyItem();
			// System.out.println(chaine);
			while (nbreEssaye > 0) {
				if (chaine.length() > 1) {
					pw.println("vous n'avez pas envoyer un caractere...");
				} else {
					System.out.println("j'envoie une reponse...");
					pw.println("good");
					if(mot.contains(chaine)){
						pw.println("Vrai");
					}else {
						pw.println("Faux");
					}
					
				}
				nbreEssaye--;
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

et mon client le voici:
public static void lanceBr(){
		try{
			Socket s = new Socket("localhost",1569);
			InputStream is = s.getInputStream();
			InputStreamReader isr = new InputStreamReader(is);
			BufferedReader br = new BufferedReader(isr);
			OutputStream out = s.getOutputStream();
			
			Scanner sc = new Scanner(System.in);
			System.out.println("donner une lettre");
			String c = sc.nextLine();
			out.write(c.getBytes());
			String rep =br.readLine();
			String re = br.readLine();
			System.out.println("la reponse : "+rep);
			System.out.println("la reponse : "+re);
			
			
		}catch(Exception e){
			e.printStackTrace();
		}
	}

si quelqu'un me comprend, je voudrait une solution de votre part je suis debutant en CLIENT/SERVEUR, merci d'avance pour l'aide.

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
27 nov. 2017 à 22:45
Bonjour,

Ton code pourrait largement être simplifié, tu te mélanges un peu avec tous ces Stream et Reader dont la moitié ne servent à rien.

Bref, le problème c'est que côté serveur tu as
sc.nextLine()
qui attends une ligne entière (qui se termine donc par un \r ou \n)
Or côté client tu n'envoie que le caractère, il te manque la fin de la ligne.

Pour te débloquer tu peux ajouter un \n à la suite de ton caractère.
out.write(c.getBytes());
out.write('\n');
0