Bonjour à tous.
J'ai un petit probleme avec un projet.
C'est un serveur d'echange de fichier, mais je l'ai fait avec une interface graphique. Le fonctionnement:
le client clique sur un boutton, le libellé du boutton est envoyé au serveur, puis le serveur envoie le fichier du meme nom. Mais probleme mon client s'execute et n'attend pas que l'on ai apputé sur le boutton. Donc a la fin il me met un pessage d'erreur comme quoi le fichier n'est pas trouvé, ce qui est normal, vu que l'on a pas pu choisir le boutton.
voici le code du client:
le code de la fenetre au cas ou:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.InetAddress; import java.net.Socket; import java.util.Scanner; import javax.swing.JButton; public class client implements ActionListener { public static String nomFichier = null; public static void main(String[] args) throws Exception { Fenetre fen = new Fenetre(); InetAddress ip = InetAddress.getLocalHost(); int port = 9333; Socket client = new Socket(ip, port); BufferedWriter writer = null; BufferedReader reader = null; File fichier_ou_ecrire = null; BufferedOutputStream writerFichier = null; try { writer = new BufferedWriter(new OutputStreamWriter(client.getOutputStream())); //Scanner sc = new Scanner(System.in); fen.Afficheur.setText("Veuillez écrire le nom fichier en mettant des _ a la place des espaces et en precisant son extansion\n"); //String nomFichier = sc.nextLine(); writer.write(nomFichier + "\n"); writer.flush(); reader = new BufferedReader(new InputStreamReader(client.getInputStream())); fichier_ou_ecrire = new File(nomFichier); writerFichier = new BufferedOutputStream(new FileOutputStream(fichier_ou_ecrire)); int OctetLu = 0; fen.Afficheur.setText("Début du transfert du fichier: " + nomFichier); while(true) { byte[] tableauOctet = new byte[64000]; OctetLu = client.getInputStream().read(tableauOctet); if(client.isConnected() == false || OctetLu == -1) break; writerFichier.write(tableauOctet,0,OctetLu); writerFichier.flush(); } System.out.println("l'ecriture s'est normalement déroulée"); }catch(Exception e) { e.printStackTrace(); System.out.println("fatal error"); }finally { try { writer.close(); reader.close(); writerFichier.close(); }catch(Exception e) { fen.Afficheur.setText("fatal error"); } } } public void actionPerformed(ActionEvent arg0) { JButton evenement = (JButton) arg0.getSource(); String libelle = evenement.getText(); nomFichier = libelle; } }
Donc si quelqu'un savait comment faire en sorte que mon client s'arrete tant que l'utilisateur n'a pas cliqué sur le boutton, merci de poster^^
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 import java.awt.*; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class Fenetre extends JFrame { JPanel pan = new JPanel(); JPanel panBoutton = new JPanel(); JLabel Afficheur = new JLabel(); BorderLayout disposition = new BorderLayout(); GridLayout dispositionBoutton = new GridLayout(1,1); JButton bouttonFinal12 = new JButton("final fantasy 12: revenant wings.nds"); public Fenetre() { pan.setLayout(disposition); pan.add(Afficheur, disposition.NORTH); panBoutton.setLayout(dispositionBoutton); panBoutton.add(bouttonFinal12); pan.add(panBoutton, disposition.SOUTH); client cl = new client(); bouttonFinal12.addActionListener(cl); //le boutton est ecouté par l'obejet appelant, c'est a dire la fenetre this.setTitle("serveur d'echange"); this.setSize(300, 300); this.setLocationRelativeTo(null); this.setContentPane(pan); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
Partager