[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

  • Votes
  • Date
  • Date décroissante
  1. bonsoir
    est ce que vous pouvez m'expliquer comment econnecter entre 2 pC didtant avec internet et merci d'avance
    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. 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. ç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