Partage
  • Partager sur Facebook
  • Partager sur Twitter

discussion entre serveur/client via TCP

    8 juin 2008 à 19:26:00

    Bonjour, ca fait deja quelques temps que j'etudie les socket, et je viens de finir un truc tout con:
    Une socket serveur qui lit ce que le client lui envoie, et lui renvoie un message comme quoi sa ligne a bient ete lu,
    et une socket cliente qui envoie un message et qui recoit un message de la socket serveur. Tout ce beau monde utilise le protocole TCP.
    Bien entendu, si je suis ici, c'est que ca ne marche pas^^.
    Effectivement, quand je lance ma socket serveur, puis ma socket cliente, rien ne s'affiche, aucun message d'erreur, mais rien ne s'affiche.

    Voici le code de ma socket serveur:

    import java.net.*;
    import java.io.*;
     
     
    public class serveurTCP {
    	
    	static int port = 9333;
    	
    	public static void main(String[] args)throws Exception {
    		
    			ServerSocket serveur = new ServerSocket(port); //initialisation du serveur sur l'adresse local et sur le port 9333
    			Socket client = serveur.accept(); //on accepte le prochain client qui essaye de se connecter
    			String ligne;
    			try {
    				// on cré reader, le buffer qui se cre a partir de l'objet inputstreamreader et qui recupere le flux du client
    				BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
    				//la on recupere le flux d'ecriture vers le client
    				BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
    				String message = "votre ligne a bien ete lu par le serveur";
    				writer.write(message);
    				while((ligne = reader.readLine()) != null)
    					System.out.println(ligne);
    				writer.flush();
    				writer.close();
    				reader.close();
    			
    		}catch(Exception e) {
    			System.out.println("fatal error");
    			e.printStackTrace();
    		}
    	}
    	
     
    }
     Et voici le code de ma socket cliente:
    


    et mon code cote client:

    import java.net.*;
    import java.io.*;
     
    public class clientTcp {
    	
    	public static void main(String[] args)throws Exception {
    		InetAddress ip = InetAddress.getLocalHost();
    		int port = 9333;
    		Socket client = new  Socket(ip, port);
    		BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
    		String donneEnvoye = "yoann";
    		writer.write(donneEnvoye);
    		BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
    		String donneLu = null;
    		while((donneLu = reader.readLine()) != null)
    		System.out.println(donneLu);
    		
    		writer.flush();
    		writer.close();
    		reader.close();
    	}
    	
     
    }
    


    (c'est normal que le client ne gere pas les exception, je feraica quand ca marchera)

    Voila, merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      8 juin 2008 à 20:59:05

      Tu utilise des buffered...

      Donc pour envoyer quelque chose, tu dois utiliser : writer.flush();

      Normalement après ça marche :)
      • Partager sur Facebook
      • Partager sur Twitter
        8 juin 2008 à 23:37:01

        Je te suggère d'utiliser un PrintWriter au lieu d'un BufferedWriter.

        Si tu fais ça, lors de la création de ton PrintWriter, n'oublie pas de passer "true" comme deuxieme paramètre, cela permet de passer le flux en autoflush : après chaque appel de println, le flux sera flush.

        Un très bon document (celui grâce auquel j'ai appris à utiliser les sockets en java :p ) : http://queinnec.perso.enseeiht.fr/Ens/ [...] ket-java.html
        • Partager sur Facebook
        • Partager sur Twitter
          9 juin 2008 à 20:47:56

          Ok merci a vous pour votre aide.
          scboffspring, j'utilise un flush. Pas au bon endroit?
          Sinon merci de tuto, mes printWriter, mais flux ne seront pas bufferisé et je ne pourai plus envoye directement de String si?

          en tout cas merci
          • Partager sur Facebook
          • Partager sur Twitter
            9 juin 2008 à 21:02:17

            Si, les PrintWriter sont bufférisés.
            • Partager sur Facebook
            • Partager sur Twitter
              9 juin 2008 à 21:05:17

              Et quelles sont les avaages d'utiliser les PrintWriter?
              Sinon, j'ai bien flusher le buffer, juste apres la ligne d'ecriture, et ca ne marche toujours pas.
              • Partager sur Facebook
              • Partager sur Twitter
                9 juin 2008 à 21:36:44

                Citation : zydra

                Ok merci a vous pour votre aide.
                scboffspring, j'utilise un flush. Pas au bon endroit?
                Sinon merci de tuto, mes printWriter, mais flux ne seront pas bufferisé et je ne pourai plus envoye directement de String si?

                en tout cas merci




                Ouais... Car là, vu que tu attends de recevoir quelque chose, et que t'as pas encore envoyer ton truc, ça va pas marcher... Faut faire ton flush() juste après avoir écrit tes données (write()).


                Après ça marchera :)


                Et personnellement, les buffered sont bien meilleurs... Mais bon...
                • Partager sur Facebook
                • Partager sur Twitter
                  9 juin 2008 à 22:58:33

                  Les PrintWriter ont plusieurs avantages : 1/l'autoflush et surtout 2/plus de méthodes pour envoyer des string, des types primitifs, des chaînes formatées, etc. Tu utilises aussi facilement un PrintWriter que la sortie standard System.out (ce dernier est un PrintStream mais les méthodes disponibles sont assez similaires)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    9 juin 2008 à 23:38:05

                    L'auto-flush? Mouais... Bof... Permet moins de gérer quand on a envie d'envoyer les données sur le réseaux... Plus intéressant selon l'utilisation de géré quand on veut envoyer notre objet sur le résesau...


                    Ma fois, chacun ces goûts comme on dit =)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      10 juin 2008 à 2:01:54

                      l'avantage non négligeable d'un PrintWriter, outre la possibilité d'activer l'autoflush, c'est surtout d'être vraiment transparent à l'utilisation : Il suffit d'appeler par exemple println sur le flux pour écrire une string... Très propre dans l'esprit je trouve :)
                      • Partager sur Facebook
                      • Partager sur Twitter
                        10 juin 2008 à 8:50:53

                        Citation


                        L'auto-flush? Mouais... Bof... Permet moins de gérer quand on a envie d'envoyer les données sur le réseaux... Plus intéressant selon l'utilisation de géré
                        quand on veut envoyer notre objet sur le résesau...


                        L'autoflush intervient à chaque changement de ligne. Un bon nombre de protocoles réseau fonctionnent en ascii et la fin d'une commande se termine par un saut de ligne (HTTP, POP, IMAP, FTP, IRC, etc, etc.). Donc c'est tout à fait justifié et ne gène en rien les échanges...
                        • Partager sur Facebook
                        • Partager sur Twitter
                          10 juin 2008 à 20:05:27

                          ca ne marche toujours pas. Revoici les 2codes:

                          client:

                          import java.net.*;
                          import java.io.*;
                          
                          public class clientTcp {
                          	
                          	public static void main(String[] args)throws Exception {
                          		InetAddress ip = InetAddress.getLocalHost();
                          		int port = 9333;
                          		Socket client = new  Socket(ip, port);
                          		BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
                          		String donneEnvoye = "yoann";
                          		writer.write(donneEnvoye);
                          		writer.flush();
                          		BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
                          		String donneLu = null;
                          		while((donneLu = reader.readLine()) != null)
                          		System.out.println(donneLu);
                          		
                          		writer.close();
                          		reader.close();
                          	}
                          	
                          
                          }
                          


                          voici le serveur:

                          import java.net.*;
                          import java.io.*;
                          
                          
                          public class serveurTCP {
                          	
                          	static int port = 9333;
                          	
                          	public static void main(String[] args)throws Exception {
                          		
                          			ServerSocket serveur = new ServerSocket(port); //initialisation du serveur sur l'adresse local et sur le port 9333
                          			Socket client = serveur.accept(); //on accepte le prochain client qui essaye de se connecter
                          			String ligne;
                          			try {
                          				// on cré reader, le buffer qui se cre a partir de l'objet inputstreamreader et qui recupere le flux du client
                          				BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
                          				//la on recupere le flux d'ecriture vers le client
                          				BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
                          				String message = "votre ligne a bien ete lu par le serveur";
                          				writer.write(message);
                          				writer.flush();
                          				while((ligne = reader.readLine()) != null)
                          					System.out.println(ligne);
                          				writer.close();
                          				reader.close();
                          			
                          		}catch(Exception e) {
                          			System.out.println("fatal error");
                          			e.printStackTrace();
                          		}
                          	}
                          	
                          
                          }
                          
                          • Partager sur Facebook
                          • Partager sur Twitter
                            10 juin 2008 à 20:24:42

                            Il faut rajouter \n a la fin de tes chaines de caractère. ;)
                            • Partager sur Facebook
                            • Partager sur Twitter
                              10 juin 2008 à 20:34:04

                              ca ne marche toujours pas. J'ai mit \n apres "votre ligne a bien ete lu\n" et apres "yoann\n"

                              Mais ca ne change rien

                              Sinon merci
                              • Partager sur Facebook
                              • Partager sur Twitter
                                10 juin 2008 à 20:39:02

                                Le code suivant marche parfaitement chez moi. As tu une exception qui se déclenche sinon ?

                                import java.io.BufferedReader;
                                import java.io.BufferedWriter;
                                import java.io.InputStreamReader;
                                import java.io.OutputStreamWriter;
                                import java.net.InetAddress;
                                import java.net.ServerSocket;
                                import java.net.Socket;
                                
                                public class serveurTCP {
                                	
                                	static int port = 9333;
                                	
                                	public static void main(String[] args)throws Exception {
                                		
                                			ServerSocket serveur = new ServerSocket(port); //initialisation du serveur sur l'adresse local et sur le port 9333
                                			Socket client = serveur.accept(); //on accepte le prochain client qui essaye de se connecter
                                			String ligne;
                                			try {
                                				// on cré reader, le buffer qui se cre a partir de l'objet inputstreamreader et qui recupere le flux du client
                                				BufferedReader
                                				reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
                                				//la on recupere le flux d'ecriture vers le client
                                				BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
                                				String message = "votre ligne a bien ete lu par le serveur\n";
                                				writer.write(message);
                                				writer.flush();
                                				while((ligne = reader.readLine()) != null)
                                					System.out.println(ligne);
                                				writer.close();
                                				reader.close();
                                			
                                		}catch(Exception e) {
                                			System.out.println("fatal error");
                                			e.printStackTrace();
                                		}
                                	}
                                	
                                
                                }
                                
                                
                                
                                class clientTcp {
                                	
                                	public static void main(String[] args)throws Exception {
                                		InetAddress ip = InetAddress.getLocalHost();
                                		int port = 9333;
                                		Socket client = new  Socket(ip, port);
                                		BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
                                		String donneEnvoye = "yoann\n";
                                		writer.write(donneEnvoye);
                                		writer.flush();
                                		BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
                                		String donneLu = null;
                                		while((donneLu = reader.readLine()) != null)
                                		System.out.println(donneLu);
                                		
                                		writer.close();
                                		reader.close();
                                	}
                                	
                                
                                }
                                
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  11 juin 2008 à 16:56:30

                                  Je vais essaye en lui faisan elver une exception.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    13 juin 2008 à 21:48:08

                                    Ok, je viens de ressayer sans rien changer et ca marche. Bizare, enfin on va pas se plaindre.

                                    Merci pour votre aide
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      15 juin 2008 à 21:47:39

                                      tu avais peut etre oublie de recompiler

                                      resolu ^^
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        16 juin 2008 à 20:38:15

                                        Pour un nouveau projet, on m'a conseillé d'utiliser un socketOutputStream(pour envoyer un tableau de byte en pricisan la taille et tout), genre:
                                        socketOutputStream.write(tableauDeByte,0,taille);

                                        Mais, le probleme c'est que je ne sais pas comment se forme socketInputStream, quelqu'un pourrait il me donner un exemple?

                                        Merci d'avance
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          16 juin 2008 à 22:43:27

                                          cadeau:

                                          package com.daedric.net;
                                          
                                          
                                          
                                          import java.io.File;
                                          
                                          import java.io.FileInputStream;
                                          
                                          import java.io.FileNotFoundException;
                                          
                                          import java.io.IOException;
                                          
                                          import java.io.InputStream;
                                          
                                          import java.io.ObjectOutputStream;
                                          
                                          import java.io.OutputStream;
                                          
                                          import java.io.PrintWriter;
                                          
                                          import java.net.Socket;
                                          
                                          import java.util.Scanner;
                                          
                                          import java.util.concurrent.locks.Lock;
                                          
                                          import java.util.concurrent.locks.ReentrantLock;
                                          
                                          
                                          
                                          /**
                                          
                                           * @author Thomas
                                          
                                           */
                                          
                                          public class Connection {
                                          
                                          	private InputStream		in;
                                          
                                          
                                          
                                          	private Lock			lock;
                                          
                                          
                                          
                                          	private PrintWriter		out;
                                          
                                          
                                          
                                          	private OutputStream	outstream;
                                          
                                          
                                          
                                          	private Scanner			sc;
                                          
                                          
                                          
                                          	public Socket			sock;
                                          
                                          
                                          
                                          	public Connection(Socket i) throws IOException {
                                          
                                          
                                          
                                          		sock = i;
                                          
                                          		in = sock.getInputStream();
                                          
                                          		outstream = sock.getOutputStream();
                                          
                                          		out = new PrintWriter(outstream, true);
                                          
                                          		sc = new Scanner(in);
                                          
                                          		lock = new ReentrantLock();
                                          
                                          
                                          
                                          	}
                                          
                                          
                                          
                                          	public void flush() throws IOException {
                                          
                                          		lock.lock();
                                          
                                          		getOutputStream().flush();
                                          
                                          		this.out.flush();
                                          
                                          		lock.unlock();
                                          
                                          	}
                                          
                                          
                                          
                                          	public synchronized boolean sendFile(String file) {
                                          
                                          		return sendFile(new File(file));
                                          
                                          	}
                                          
                                          
                                          
                                          	public boolean sendFile(File file) {
                                          
                                          		lock.lock();
                                          
                                          		try {
                                          
                                          			FileInputStream inf = new FileInputStream(file);
                                          
                                          			int c = 0;
                                          
                                          			while ((c = inf.read()) > -1)
                                          
                                          				outstream.write(c);
                                          
                                          			outstream.flush();
                                          
                                          
                                          
                                          		}
                                          
                                          		catch (FileNotFoundException e) {
                                          
                                          			e.printStackTrace();
                                          
                                          			return false;
                                          
                                          		}
                                          
                                          		catch (IOException e) {
                                          
                                          			e.printStackTrace();
                                          
                                          			return false;
                                          
                                          		}
                                          
                                          		finally {
                                          
                                          			lock.unlock();
                                          
                                          		}
                                          
                                          		return true;
                                          
                                          
                                          
                                          		//
                                          
                                          	}
                                          
                                          
                                          
                                          	public InputStream getInputStream() {
                                          
                                          		return in;
                                          
                                          	}
                                          
                                          
                                          
                                          	/**
                                          
                                          	 * @return the outstream
                                          
                                          	 */
                                          
                                          	public OutputStream getOutputStream() {
                                          
                                          		return outstream;
                                          
                                          	}
                                          
                                          
                                          
                                          	public PrintWriter getPrintWriterStream() {
                                          
                                          		return out;
                                          
                                          	}
                                          
                                          
                                          
                                          	/**
                                          
                                          	 * @return the sc
                                          
                                          	 */
                                          
                                          	public Scanner getScan() {
                                          
                                          		return sc;
                                          
                                          	}
                                          
                                          
                                          
                                          	/**
                                          
                                          	 * @return the sock
                                          
                                          	 */
                                          
                                          	public Socket getSock() {
                                          
                                          		return sock;
                                          
                                          	}
                                          
                                          
                                          
                                          	public void sendMes(Object Mess) {
                                          
                                          		lock.lock();
                                          
                                          		// System.out.println("message envoye => " + Mess);
                                          
                                          		this.out.println(Mess);
                                          
                                          		this.out.flush();
                                          
                                          		lock.unlock();
                                          
                                          
                                          
                                          	}
                                          
                                          
                                          
                                          	public void sendObj(Object Mess) {
                                          
                                          		lock.lock();
                                          
                                          		try {
                                          
                                          			ObjectOutputStream out = new ObjectOutputStream(getOutputStream());
                                          
                                          			out.writeObject(Mess);
                                          
                                          			out.flush();
                                          
                                          		}
                                          
                                          		catch (IOException e) {
                                          
                                          			e.printStackTrace();
                                          
                                          		}
                                          
                                          		finally {
                                          
                                          			lock.unlock();
                                          
                                          		}
                                          
                                          	}
                                          
                                          
                                          
                                          	/**
                                          
                                          	 * @param sock
                                          
                                          	 *            the sock to set
                                          
                                          	 */
                                          
                                          	public void setSock(Socket sock) {
                                          
                                          		this.sock = sock;
                                          
                                          	}
                                          
                                          
                                          
                                          	public String toString() {
                                          
                                          		return "" + sock.getInetAddress();
                                          
                                          	}
                                          
                                          
                                          
                                          	public boolean is(String ip) {
                                          
                                          		String localIp = this.toString();
                                          
                                          		return ip.compareTo(localIp = localIp.indexOf('/') > 0 ? localIp
                                          
                                          				.substring(localIp.indexOf('/') + 1) : localIp) == 0 ? true
                                          
                                          				: false;
                                          
                                          	}
                                          
                                          
                                          
                                          	/**
                                          
                                          	 * ferme toutes les connections
                                          
                                          	 * 
                                          
                                          	 */
                                          
                                          	protected void close() {
                                          
                                          		try {
                                          
                                          			this.flush();
                                          
                                          			this.getInputStream().close();
                                          
                                          			this.getOutputStream().close();
                                          
                                          			this.getSock().close();
                                          
                                          		}
                                          
                                          		catch (IOException e) {
                                          
                                          			e.printStackTrace();
                                          
                                          		}
                                          
                                          
                                          
                                          	}
                                          
                                          }
                                          


                                          ensuite ce qui est pas mal c'est de faire des classe generique pour balader tes infos
                                          dans un de mes dernier projet (encore inacheve et qui remonte a loins mais par manque de temps ....)

                                          j'utilise une classe de ce genre la :
                                          package com.daedric.dmess.message;
                                          
                                          import java.io.Serializable;
                                          
                                          import javax.swing.ImageIcon;
                                          
                                          import com.daedric.swing.text.TextStylizer;
                                          
                                          public class Message implements Requestable, Serializable {
                                          
                                                  private static final long       serialVersionUID        = -1061459363120194710L;
                                                  private TextStylizer            doc                                     = null;
                                                  private ImageIcon[]                     img                                     = null;
                                                  private String                          dest                            = null;
                                                  private String                          emetteur                        = null;
                                                  private MessageType                     type                            = null;
                                                  private MessengerAction         mac                                     = null;
                                                  private Object                          arg                                     = null;
                                          
                                                  public <T extends Serializable> Message(MessageType t, MessengerAction ac,
                                                                  T arg, String emetteur) {
                                          
                                                          this(t, ac, arg, null, emetteur, null, new ImageIcon[0]);
                                          	}
                                          
                                                  public <T extends Serializable, K extends TextStylizer> Message(
                                                                  MessageType t, String dest, String emetteur, K doc,
                                          			ImageIcon... img) {
                                                          this(t, null, null, dest, emetteur, doc, img);
                                                  }
                                          
                                          	public <T extends Serializable, K extends TextStylizer> Message(
                                                                  MessageType t, MessengerAction ac, T arg, String dest,
                                                                  String emetteur, K doc, ImageIcon... img) {
                                                          this.dest = dest;
                                          		this.arg = arg;
                                                          this.emetteur = emetteur;
                                                          this.doc = doc;
                                                          this.img = img;
                                          		this.type = t;
                                                          this.mac = ac;
                                                          if (this.type == null || this.emetteur == null)
                                                                  throw new NullPointerException("arguments null : type ="
                                          				+ this.type + "\nemetteur =" + this.emetteur);
                                          	}
                                          
                                          	public TextStylizer getDoc() {
                                          		return doc;
                                          	}
                                          
                                          	public ImageIcon[] getImg() {
                                          		return img;
                                          	}
                                          
                                          	public String getDest() {
                                          		return dest;
                                          	}
                                          
                                          	public String getEmetteur() {
                                          		return emetteur;
                                          	}
                                          
                                          	public MessageType getMessageType() {
                                          		return type;
                                          	}
                                          
                                          	@SuppressWarnings("unchecked")
                                          	public <T extends Serializable> T getArg() {
                                          		if (arg instanceof Serializable)
                                          			return (T) arg;
                                          		return null;
                                          	}
                                          
                                          	public MessengerAction getMessageAction() {
                                          		return mac;
                                          	}
                                          
                                          	public String toString() {
                                          		return "emetteur = " + this.getEmetteur() + "\ndestinataire = "
                                          				+ this.getDest() + "\nMessageType = " + this.getMessageType()
                                          				+ "\nMessageAction = " + this.getMessageAction() + "\narg = "
                                          				+ this.getArg();
                                          	}
                                          }
                                          


                                          je jouais avec les interfaces pour savoir quelle methodes j'avais le droit d'appeler ou pas
                                          je met pas tout le code ya trop de dependance et je veux juste te donner une idee de ce qui est faisable
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            17 juin 2008 à 18:20:14

                                            Alors la merci beaucoup, bien que je ne comprenne presque rien, je pense que ca va quand meme m'aider.

                                            Encore merci
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              18 juin 2008 à 17:23:20

                                              la premiere certainement la seconde plus tard peut etre
                                              avec la classe Message je transferer n'importe quel donnee et je pouvais savoir quoi recuperer en fonction du type du message ...

                                              la premiere te propose juste des methodes pour lire et ecrire sur la socket un peu plus simplement ... pourla lecture utilise Scanner
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                18 juin 2008 à 19:07:34

                                                Ok, le debut de mon projet est terminé, j'arrive a recopier un fichier, quelque soit sa taille, et ca marche très bien.
                                                Maintenant je dois faire en sorte que le client se connecte au serveur de n'importe quel pc, donc pas qu'en local, je fais donc:

                                                Socket client = new Socket("xx.xx.xx.xxx", 9333);
                                                


                                                et ca ne marche pas, message d'erreur, la socket ne se connecte pas au serveur.
                                                As tu une autre solution, ou sais tu pourquoi ca ne marche pas?
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  26 juin 2008 à 18:27:14

                                                  up
                                                  Toujours le meme probleme.
                                                  Si je mets des adresses locales, ça marche mais dès qu'on passe aux adresses internet, le client ne se connecte plus.
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    26 juin 2008 à 22:41:56

                                                    C'est peut-être con à dire, mais commence par vérifier les firewalls & co... il n'y a pas de raison que ça marche dans un réseau local mais pas en ligne.
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      27 juin 2008 à 1:41:26

                                                      Citation : daedric

                                                      tu avais peut etre oublie de recompiler


                                                      lawlz ...
                                                      Bon sinon, mon post ne sera d'aucune utilité direct pour ton problème, seuleument « décoratif », ou plutôt pour te montrer comment on ferait dans d'autres langages, en l'occurence Erlang :

                                                      Le serveur


                                                      -module(serveur).
                                                      -export([main/0]).
                                                      
                                                      -define(port, 9333).
                                                      
                                                      main() ->
                                                          Serveur = gen_tcp:listen(?port, [binary, {packet, line}]),
                                                          case Serveur of
                                                              {ok, Listen} ->
                                                                  {ok, Client} = gen_tcp:accept(Listen),
                                                                  gen_tcp:close(Listen),
                                                                  read(Client);
                                                              {error, Something} ->
                                                                  io:format("~p~n", [Something])
                                                          end.
                                                      
                                                      read(Client) ->
                                                          receive
                                                              {tcp, Client, Bin} ->
                                                                  gen_tcp:send(Client, "Votre message a bien ete recu"),
                                                                  io:format("~p~n", [binary_to_list(Bin)]),
                                                                  read(Client);
                                                              {tcp_closed, Client} ->
                                                                  io:format("Fin de la connexion.~n"),
                                                                  gen_tcp:close(Client)
                                                          end.
                                                      

                                                      Note que je gère explicitement la déconnexion, je ne sais pas si c'est implicite en Java où si tu as tout simplement oublié de le faire mais bon voilà... moi je le fais.
                                                      De plus mon serveur tournera tant que le client sera connecté, et ne s'arrêtera pas à la réception du premier message.

                                                      Le client


                                                      -module(client).
                                                      -export([main/0]).
                                                      
                                                      -define(port, 9333).
                                                      -define(host, 127.0.0.1).
                                                      
                                                      main() ->
                                                          {ok, Socket} = gen_tcp:connect(?host, ?port, [binary, {packet, line}]),
                                                          gen_tcp:send(Socket, "yoann"),
                                                          receive {tcp, Socket, Bin} -> io:format("~p~n", [binary_to_list(Bin)]) end,
                                                          gen_tcp:close(Socket).
                                                      


                                                      Bon voilà, ce sera tout. À noter que je me suis basé sur ton premier code, je n'ai pas tenu comte des ajouts ayant été faits ensuite...
                                                      Voilà, à toutes les personnes qui ont prévu de me critiquer : je ne repasserai probablement pas sur ce forum, donc vous perdez votre temps.
                                                      Ensuite pour ceux qui voudraient se jetter sur l'occasion : ce n'est pas un troll, je ne critique pas le Java ni ne fait l'apologie de l'Erlang sur le Java, c'est juste pour montrer aux zéros passant ici « comment on fait ailleurs ».
                                                      Sur ce, bonne soirée.
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        29 juin 2008 à 7:37:18

                                                        met tout ton code et explicite l'installation ...
                                                        tout est en local ? si oui tu as bien mis les memes port ?
                                                        si c'est sur deux machine differentes, sont elle sur le meme sous reseau ? si oui firewall ?
                                                        sinon routage de port ? firewall ?
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          30 juin 2008 à 11:09:00

                                                          A mon avis c'est un probleme de pare feu avec la livebox.
                                                          Parce que en local les pc sont dans le meme groupe de travail et tout.
                                                          J'ai bien mis le meme port.
                                                          Je vous tiens a courant.

                                                          edit: tout conte fait, meme sans le pare feu de la livebox ca ne marche pas.
                                                          Je ne vos vraiment pas ou es le probleme surtout qu'avec les adresse locales, ca marche du tonerre^^.
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            3 juillet 2008 à 9:52:31

                                                            up
                                                            toujours pas d'idées?
                                                            Est ce que ca viendrai du fait que les 2 pc que j'essaye de faire communiquer des pc qui sont en local, mais que dans le client du pc1 je met l'adresse public(intenet) du pc2?
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              5 juillet 2008 à 18:05:35

                                                              possible
                                                              ca fais dix ans qu'on te demande les adresses que tu entres et ce genre de chose...
                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              discussion entre serveur/client via TCP

                                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                              • Editeur
                                                              • Markdown