Forum Clubic

Question sur les socket

bonjour a tous alors voila jorai une toute petite question sur les sockets en java.
La toile n’etant pas tres riche en matiere de tuto simple sur les socket et pour les debutant je me permet de vous exposer mon probleme.
Je suis vraiment un noob en programation java.
Alors j’ai creer 2 classes une qui sappele graphique qui s’occupe d’afficher les composant de ma fenetres.
Et une classe qui s’occupe du traitement socket. Je ne vai pas vous casser les pieds en vous demandant un truc super compliquer.
Je veux simplement un minicode qui se connect a une adresse x, qui envoie un message y, et qui recoit une reponse z si tous pas plus complex.
Voila le contenue de ma classe Graphique


import java.awt.*;
import javax.swing.*;

public class Graphique {

	JFrame cadre = new JFrame("Test") ;
	JPanel panneauPrincipal = new JPanel() ;
	GridLayout dispositionPanneauPrincipal =  new GridLayout(5,1) ;
	JLabel texteAcceuil = new JLabel("Veuillez entrez ci-dessous le texte a envoyé a votre serveur.") ;
	JTextArea texteAEnvoyer = new JTextArea() ;
	JButton boutton = new JButton("Cliquer pour envoyer") ;
	JLabel texte2 = new JLabel("Message du server :" ) ;
	JTextArea texteRecu = new JTextArea() ;
	
	Graphique(){
		panneauPrincipal.setLayout(dispositionPanneauPrincipal) ;
		panneauPrincipal.add(texteAcceuil) ;
		panneauPrincipal.add(texteAEnvoyer) ;
		panneauPrincipal.add(boutton) ;
		panneauPrincipal.add(texte2) ;
		panneauPrincipal.add(texteRecu) ;
		traitementSocket sockets = new traitementSocket(this) ;
		boutton.addActionListener(sockets) ;
		cadre.setContentPane(panneauPrincipal) ;
		cadre.pack() ;
		cadre.setVisible(true) ;
	
	}
	
	public static void main(String[] args) {
		new Graphique() ;
	}

}

Et maintenant voila le code de ma classe TraitementSocket


import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.*;

public class traitementSocket implements ActionListener{
	Graphique parent ;

	traitementSocket(Graphique adresseMemoire){
	parent = adresseMemoire ;
}

public void actionPerformed(ActionEvent e) {
	
	parent.texteAEnvoyer.setText("tentative de connection a localhost :") ;
	Socket monSocket ;
	try{
		monSocket = new Socket("localhost", 58965) ;
		
		
	}catch (Exception erreur) {
		parent.texteAEnvoyer.setText(parent.texteAEnvoyer.getText()+"\nErreur lors de la creation du socket...") ;
	}
	
	
}

}

voila voila
tous est di
j’espere qune ame chartiable denieura repondre a ma question merci d’avance.
Edité le 07/11/2007 à 18:37

Bonjour freeserhm,

oussa? :smiley:

Sinon, pour la Socket côté client:
java.sun.com…
utilise le constructeur avec host et port, puis les méthodes connect, getInputStream, getOutputStream.

côté server
java.sun.com…
tu crée le serveur avec N° de port, puis tu fait un accept, et après, c’est comme côté client.

niveau flux, travaille en ascii avec des PrintWriter, PrintReader(), comme ça tu peux débugger ton server avec un simple telnet et ça marche.

Bonjour deltree tu as l’air de bien ty connaitre a se sujet
Je voudrai savoir dans l’exemple que j’ai formuler est-il nessesaire de coder une partie server??$

puis-je me debrouiller selement avec le coter client en me preocupant seulement de l’envoie et non de la reception.

Les Sockets sont bidirectionnelles, donc tu ouvre pour l’envoi et la réception en même temps avec les 2 flux inputStream et OutputStream

Ensuite tout dépend de ce que tu veux faire avec tes clients: il faut forcément un serveur pour ouvrir un port socket:
quand tu demande une connection sur localhost:58965 si personne “n’attend” sur cette socket, la connection sera refusée.

Maintenant ça peut être tes clients qui sont serveurs à la fois, par contre, il faudra les lancer avec des ports différents, car évidemment 2 serveurs ne peuvent pas attendre sur le même port Socket (c’est un identifiant). Donc c’est souvent plus simple d’avoir un serveur qui ne fait que ça.
edit: ou un client “maître” qui joue le rôle de serveur principal
Edité le 07/11/2007 à 18:59

okok merci pour tes precieux conseil
Derniere question apres promis je t’embete plus.
Imaginons que j’ouvre un socket sur le port 8080, Que va t’il se passer??
Va t’il rentrer en conflit avec Internet explorer ?
si Oui comment l’eviter…???
Merci d’avance

Avec IE certainement pas, C’est le port serveur d’un proxy qui pourrait entrer en conflit avec un de tes serveurs.
Tu peux ouvrir autant de client que tu veux qui adressent le port 8080: lancer à la fois Firefox et IE.

Oui mais les reponces du serveur avec qui je veux communiquer vont elle etre envoyé sur le port 8080 donc comment je fai pour les lire si d’apres toi le port 8080 est deja “ecouter” par le socket server de Internet explorer. Et si je decidais quand meme de creer un socket server sur le port 8080 va t-il me creer une erreur ??
Et si je lance mon server avant Internet explorer que se passe t-il ???

ça peut peut-être t’aider à comprendre les ports TCP
www.commentcamarche.net…

ça lève une exception, qu’il suffit d’attraper pour afficher un message d’erreur et sortir proprement du programme.