A voir également:
- Java socket
- Waptrick java football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Jeux java football - Télécharger - Jeux vidéo
- Java jre - Télécharger - Langages
- Télécharger jeux java gameloft gratuit - Forum Mobile
4 réponses
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 014
21 août 2020 à 23:51
21 août 2020 à 23:51
Bonjour,
"ne faîtes pas un programme à ma place si vous ne le voulez pas, mais au moins, redirigez moi vers un site"
Pas la peine de te faire un programme exprès, je l'ai déjà fait il y a quelques années sur ce même forum...
https://forums.commentcamarche.net/forum/affich-22960561-envoi-des-fichiers-par-des-sockets-java#3
"ne faîtes pas un programme à ma place si vous ne le voulez pas, mais au moins, redirigez moi vers un site"
Pas la peine de te faire un programme exprès, je l'ai déjà fait il y a quelques années sur ce même forum...
https://forums.commentcamarche.net/forum/affich-22960561-envoi-des-fichiers-par-des-sockets-java#3
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 014
22 août 2020 à 11:33
22 août 2020 à 11:33
Bonjour,
J'ai repris le programme cité précédemment, j'en ai profité pour le mettre au goût du jour, parce que c'était du code Java 6 (normal en 2011), on peut faire un peu mieux depuis.
Donc effectivement il faut d'abord démarrer le serveur.
Une fois prêt le serveur affiche le nom de la machine et son adresse IP ainsi que le port sur lequel il écoute :
Il faut donc ensuite démarrer le client avec la même configuration :
Si tout fonctionne bien, le fichier D:/testClient.jpg sur le PC où s'exécute le programme client sera copié vers le fichier D:/testServer.jpg du PC où s'exécute le programme serveur.
Attention : pour que les deux PC puissent communiquer entre eux, ils doivent être sur le même réseau. Il est par exemple exclu d'utiliser ce système de communication au travers d'internet, à moins que l'adresse du serveur ne soit une IP publique référencée via un nom de domaine.
J'ai repris le programme cité précédemment, j'en ai profité pour le mettre au goût du jour, parce que c'était du code Java 6 (normal en 2011), on peut faire un peu mieux depuis.
Donc effectivement il faut d'abord démarrer le serveur.
import java.net.*; import java.nio.file.*; import static java.util.logging.Logger.getGlobal; public class Serveur { public static void main(String... args) throws Exception { InetAddress serverAddress = InetAddress.getLocalHost(); // L'adresse du serveur où envoyer le fichier int serverPort = 9001; // Le port où le serveur doit attendre les connexions Path filePath = Paths.get("D:/testServer.jpg"); // Le chemin d'accès où enregistrer le fichier cible try (ServerSocket serverSocket = new ServerSocket(serverPort)) { // Démarrage du serveur qui va attendre une connexion getGlobal().info("Le serveur est démarré, un client peut se connecter sur le port " + serverPort + " de " + serverAddress ); try (Socket socket = serverSocket.accept()) { // On attend la connexion d'un client et on l'accepte dès qu'elle arrive getGlobal().info("Connexion réussie avec le client " + socket.getInetAddress()); Files.copy(socket.getInputStream(), filePath, StandardCopyOption.REPLACE_EXISTING); // On récupère le fichier du client et on l'enregistre getGlobal().info("Réception du fichier terminé : " + filePath); } getGlobal().info("Le client est déconnecté"); } getGlobal().info("Le serveur est arrêté"); } }
Une fois prêt le serveur affiche le nom de la machine et son adresse IP ainsi que le port sur lequel il écoute :
INFOS: Le serveur est démarré, un client peut se connecter sur le port 9001 de PC-KX/192.168.1.1
Il faut donc ensuite démarrer le client avec la même configuration :
import java.net.*; import java.nio.file.*; import static java.util.logging.Logger.getGlobal; public class Client { public static void main(String[] args) throws Exception { String serverNameOrIp = "PC-KX"; // le nom ou l'adresse IP du serveur où envoyer le fichier int serverPort = 9001; // Le port où le serveur attend la connexion Path filePath = Paths.get("D:/testClient.jpg"); // Le chemin d'accès du fichier à envoyer au serveur getGlobal().info("Identification du serveur par son nom ou son adresse IP : " + serverNameOrIp); InetAddress serverAddress = InetAddress.getByName(serverNameOrIp); // L'adresse du serveur où envoyer le fichier getGlobal().info("Tentative de connexion sur le port " + serverPort + " de " + serverAddress); try (Socket socket = new Socket(serverAddress, serverPort)) { // Ouverture d'une connexion avec le serveur getGlobal().info("Connexion réussie au serveur " + socket.getInetAddress()); Files.copy(filePath, socket.getOutputStream()); // Copie du fichier vers le serveur getGlobal().info("Envoi du fichier terminé : " + filePath); } getGlobal().info("La connexion est terminée"); } }
Si tout fonctionne bien, le fichier D:/testClient.jpg sur le PC où s'exécute le programme client sera copié vers le fichier D:/testServer.jpg du PC où s'exécute le programme serveur.
Attention : pour que les deux PC puissent communiquer entre eux, ils doivent être sur le même réseau. Il est par exemple exclu d'utiliser ce système de communication au travers d'internet, à moins que l'adresse du serveur ne soit une IP publique référencée via un nom de domaine.
Comment pourrais-je "réparer" ça et à quoi est du cette erreur ?
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 014
22 août 2020 à 23:25
22 août 2020 à 23:25
Un fichier c'est un ensemble d'octets stockés sur le disque, les sockets permettent de transférer des octets sur le réseau, donc les deux ensemble fonctionnent plutôt bien.
Mais un dossier c'est bien plus compliqué, car au delà des octets de chaque fichier pris séparément, il y a la structure du dossier, à commencer par le nom des fichiers.
Pour traiter un dossier plutôt qu'un fichier il faut faire évoluer le programme, car pour l'instant c'est un exemple très simple, mais forcément plus tu vas vouloir enrichir ton besoin plus le programme va être compliqué.
Ici, il va falloir transférer via les sockets davantage de données que le seul contenu du fichier, puisqu'il faut rajouter a minima le nom du fichier. Sans oublier bien sûr de faire une boucle pour pas que le serveur ne s'arrête après la fin du premier fichier reçu.
Techniquement je t'orienterai vers les ObjectInputStream et ObjectOutputStream pour la partie socket à proprement parler, et pour aller plus loin j'irai vers les WatchService pour automatiquement détecter les modifications d'un fichier et transférer les modifications sur le serveur.
NB. Soyons honnêtes, si je devais faire moi même ce genre de programme je ne m'embêterai pas à créer un serveur en traitant directement les sockets, c'est très bas niveau, il existe de nombreux outils en Java - et notamment en JEE - pour faire de la communication client serveur sans avoir à réinventer la roue à chaque fois.
Mais un dossier c'est bien plus compliqué, car au delà des octets de chaque fichier pris séparément, il y a la structure du dossier, à commencer par le nom des fichiers.
Pour traiter un dossier plutôt qu'un fichier il faut faire évoluer le programme, car pour l'instant c'est un exemple très simple, mais forcément plus tu vas vouloir enrichir ton besoin plus le programme va être compliqué.
Ici, il va falloir transférer via les sockets davantage de données que le seul contenu du fichier, puisqu'il faut rajouter a minima le nom du fichier. Sans oublier bien sûr de faire une boucle pour pas que le serveur ne s'arrête après la fin du premier fichier reçu.
Techniquement je t'orienterai vers les ObjectInputStream et ObjectOutputStream pour la partie socket à proprement parler, et pour aller plus loin j'irai vers les WatchService pour automatiquement détecter les modifications d'un fichier et transférer les modifications sur le serveur.
NB. Soyons honnêtes, si je devais faire moi même ce genre de programme je ne m'embêterai pas à créer un serveur en traitant directement les sockets, c'est très bas niveau, il existe de nombreux outils en Java - et notamment en JEE - pour faire de la communication client serveur sans avoir à réinventer la roue à chaque fois.
Modifié le 22 août 2020 à 09:21
Adresse Instagram supprimée par la modération CCM - l'aide se fait sur le forum, Demande contraire à la charte du site !