[JAVA]transfert fichier vers un pc distant

Résolu
Je vous explique mon problème :

Je commence à développer actuellement un client bittorrent et je prend comme base un modèle client-serveur classique avec des socket etc ... seulement je n'arrive même pas à connecter le client au serveur sur un pc distant et encore moins à envoyer un fichiers de l'un à l'autre.

j'aimerai connecter le client au serveur à l'aide de l'ip et du numero de port que le client doit déjà connaitre

merci d'avance
Configuration: Windows XP
Firefox 2.0.0.1

4 réponses

  1. ça y est j'ai enfin réussi à me connecter sur mon reseau ( c'était juste un problème de config du routeur ) mais je n'arrive toujours pas à me connecter à un pc distant se trouvant derrière un routeur , la connection échoue systématiquement. Voici le code de mon client :

    import java.io.*;
    import java.util.*;
    import java.net.*;

    public class Client {

    static String serverName="localhost";
    static int port=12345;
    static InetAddress ipRoot;
    static InetAddress ip;

    public static void main(String[] a){
    try{
    iproot = InetAddress.getByName("82.67.139.165");
    ip = InetAddress.getByName("192.168.0.2");
    Random rand=new Random();
    for(int i=0;i<100;i++){
    Socket sock=new Socket(iproot, port, ip,port);
    PrintWriter os=new PrintWriter(sock.getOutputStream(), true);

    os.println(rand.nextInt(100));
    sock.close();}
    }
    catch (UnknownHostException ex) {
    System.err.println(ex);
    }
    catch(java.io.IOException e){
    System.out.println("Erreur de connexion");
    }
    }

    }

    le routeur redirige son port 12345 sur le 12345 du pc

    merci d'avance
    1. Contributeur
      salut.
      Pourquoi ouvrir et fermer le socket à chaque foi dans la boucle for ?
      Moi, je mettrai l'initialisation et la fermeture en dehors.
      1. Bonjour,
        Je vous explique mon problème :

        Moi aussi je commence à développer actuellement un client et un serveur communiquent avec des socket etc ... seulement je n'arrive même pas à connecter le client au serveur sur un seul pc et encore moins à envoyer un ''hello word '' ou bien un fichiers de l'un à l'autre.
        je voudrais connecter le client au serveur à l'aide de l'ip et du numero de port .
        si vous pouvais m'aider avec ton code source.

        Merci d'avance bien cordialement.
        1. Bonjour,
          essayer avec ces codes
          //Client
          // Figure 21.4: Client.java
          // Définit un Client qui lira les informations envoyées
          // à partir d'un Serveur et affiche les informations.
          import java.io.*;
          import java.net.*;
          import java.awt.*;
          import java.awt.event.*;
          import javax.swing.*;

          public class Client extends JFrame {
          private JTextField texte;
          private JTextArea affichage;
          ObjectOutputStream sortie;
          ObjectInputStream entree;
          String message = "";

          public Client()
          {
          super( "Client" );

          Container c = getContentPane();

          texte = new JTextField();
          texte.setEnabled( false );
          texte.addActionListener(
          new ActionListener() {
          public void actionPerformed( ActionEvent e )
          {
          envoyerDonnees( e.getActionCommand() );
          }
          }
          );
          c.add( texte, BorderLayout.NORTH );

          affichage = new JTextArea();
          c.add( new JScrollPane( affichage ),
          BorderLayout.CENTER );

          setSize( 300, 150 );
          show();
          }

          public void lanceClient()
          {
          Socket client;

          try {
          // Etape 1: Créer un Socket pour assurer la connexion.
          affichage.setText( "Tentative de connexion\n" );
          client = new Socket(
          InetAddress.getByName( "127.0.0.1" ), 5000 );

          affichage.append( "Connecté à: " +
          client.getInetAddress().getHostName() );

          // Etape 2: Get des flux d'entrée et de sortie.
          sortie = new ObjectOutputStream(
          client.getOutputStream() );
          sortie.flush();
          entree = new ObjectInputStream(
          client.getInputStream() );
          affichage.append( "\nFlux d'E/S acquis\n" );

          // Etape 3: Procéder à la connexion.
          texte.setEnabled( true );

          do {
          try {
          message = (String) entree.readObject();
          affichage.append( "\n" + message );
          affichage.setCaretPosition(
          affichage.getText().length() );
          }
          catch ( ClassNotFoundException cnfex ) {
          affichage.append(
          "\nType d'objet reçu inconnu" );
          }
          } while ( !message.equals( "SERVEUR>>> TERMINER" ) );

          // Etape 4: Clore la connexion.
          affichage.append( "Clôture de la connexion.\n" );
          entree.close();
          sortie.close();
          client.close();
          }
          catch ( EOFException eof ) {
          System.out.println( "Serveur a clôturé la connexion" );
          }
          catch ( IOException e ) {
          e.printStackTrace();
          }
          }

          private void envoyerDonnees( String s )
          {
          try {
          message = s;
          sortie.writeObject( "CLIENT>>> " + s );
          sortie.flush();
          affichage.append( "\nCLIENT>>>" + s );
          }

          catch ( IOException cnfex ) {
          affichage.append(
          "\nErreur écriture de l'objet" );
          }
          }

          public static void main( String args[] )
          {
          Client app = new Client();

          app.addWindowListener(
          new WindowAdapter() {
          public void windowClosing( WindowEvent e )
          {
          System.exit( 0 );
          }
          }
          );

          app.lanceClient();
          }
          }
          //Serveur
          // Figure 21.3: Serveur.java
          // Mettre en place un serveur qui attend la connexion
          // d'un client, envoie une chaîne de caractères au client,
          // et ferme la connexion.
          import java.io.*;
          import java.net.*;
          import java.awt.*;
          import java.awt.event.*;
          import javax.swing.*;

          public class Serveur extends JFrame {
          private JTextField texte;
          private JTextArea affichage;
          ObjectOutputStream sortie;
          ObjectInputStream entree;

          public Serveur()
          {
          super( "Serveur" );

          Container c = getContentPane();

          texte = new JTextField();
          texte.setEnabled( false );
          texte.addActionListener(
          new ActionListener() {
          public void actionPerformed( ActionEvent e )
          {
          envoyerDonnees( e.getActionCommand() );
          }
          }
          );
          c.add( texte, BorderLayout.NORTH );

          affichage = new JTextArea();
          c.add( new JScrollPane( affichage ),
          BorderLayout.CENTER );

          setSize( 300, 150 );
          show();
          }

          public void lancerServeur()
          {
          ServerSocket serveur;
          Socket connexion;
          int compteur = 1;

          try {
          // Etape 1: Créer un ServerSocket.
          serveur = new ServerSocket( 5000, 100 );

          while ( true ) {
          // Etape 2: Attendre une connexion.
          affichage.setText( "Attente d'une connexion\n" );
          connexion = serveur.accept();

          affichage.append( "Connexion " + compteur +
          " reçue de: " +
          connexion.getInetAddress().getHostName() );

          // Etape 3: Get des flux d'entrée et de sortie.
          sortie = new ObjectOutputStream(
          connexion.getOutputStream() );
          sortie.flush();
          entree = new ObjectInputStream(
          connexion.getInputStream() );
          affichage.append( "\nFlux d'E/S acquis\n" );

          // Etape 4: Procéder à la connexion.
          String message =
          "SERVEUR>>> connexion réussie";
          sortie.writeObject( message );
          sortie.flush();
          texte.setEnabled( true );

          do {
          try {
          message = (String) entree.readObject();
          affichage.append( "\n" + message );
          affichage.setCaretPosition(
          affichage.getText().length() );
          }
          catch ( ClassNotFoundException cnfex ) {
          affichage.append(
          "\nType d'objet reçu inconnu" );
          }
          } while ( !message.equals( "CLIENT>>> TERMINER" ) );

          // Etape 5: Close connexion.
          affichage.append( "\nUtilisateur a clôturé connexion" );
          texte.setEnabled( false );
          sortie.close();
          entree.close();
          connexion.close();

          ++compteur;
          }
          }
          catch ( EOFException eof ) {
          System.out.println( "Client a clôturé connexion" );
          }
          catch ( IOException io ) {
          io.printStackTrace();
          }
          }

          private void envoyerDonnees( String s )
          {
          try {
          sortie.writeObject( "SERVEUR>>> " + s );
          sortie.flush();
          affichage.append( "\nSERVEUR>>>" + s );
          }
          catch ( IOException cnfex ) {
          affichage.append(
          "\nErreur écriture de l'objet" );
          }
          }

          public static void main( String args[] )
          {
          Serveur app = new Serveur();

          app.addWindowListener(
          new WindowAdapter() {
          public void windowClosing( WindowEvent e )
          {
          System.exit( 0 );
          }
          }
          );

          app.lancerServeur();
          }
          }
      2. bonsoir
        est ce que vous pouvez m'expliquer comment econnecter entre 2 pC didtant avec internet et merci d'avance