Transmission par reseau avec socket

sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 - 21 janv. 2005 à 21:48
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 - 28 janv. 2005 à 21:44
bonjour ,
je voudrais faire un programme plus par utilite que pour m'amuser:
je voudrais faire un programme qui est capable de transmettre des fichier

et je voulais savoir par quoi commencer? le serveur et le client ? la transmittion de fichier ?
je sais que la question est bizarre moi meme je ne sais pas trop pourquoi je la pose mais je sais pas par quoi commence!!!
merci

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"

14 réponses

cs_AbriBus Messages postés 492 Date d'inscription jeudi 28 août 2003 Statut Membre Dernière intervention 25 avril 2007 5
22 janv. 2005 à 19:02
Salut.
Je penses que le client c'est vraiment pas grand chose... en tout cas, avant de pouvoir recevoir quelque choses sur un client il te faut bien envoyer ce quelque chose d'un serveur... je penses donc qu'il vaut mieux commencer par le serveur. Toutefois, cette tâche n'est pas juste un post dans un forum et la reponse se presentera d'elle meme loin de la!
J'ai deja passé plusieurs dizaines d'heures sur un projet du meme genre (un peu comme un Ftp) mais le code n'est pas tout a fait opperationnelle. Elle est disponible sur code source http://www.javafr.com/code.aspx?id=27733 (je remercie au passage les admins qui m'ont epargné cette source car il n'y a pas la possibilité de poster une source dans le forum... et tout dans le corps du message... j'ai l'impression que ca plait pas ). Neanmoins, le probleme posé n'a toujours pas trouvé de reponse et je suis a present tres proche du decouragement... J'ai également posté sur le forum http://www.javafr.com/forum.v2.aspx?ID=336050 avec une petite avancée mais pas suffisante pour que le code fonctionne...

Voila, j'espere que tu auras plus de chance que moi dans cette recherche

Que le transfert soit avec toi...

AbriBus...
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
22 janv. 2005 à 22:11
lol j'espere parceque sinon je vais devoir en graver des cd
j'ai deja commencer un squelette de ServerSocket avec une possibliter de communiquer c'est presque au point niveau communication mis a part une petite contrainte
je vous tiendrai au courant pour ce que ca interresse.
mais bon c pas demain la veille
abribus je sais pas si tu te souvien de ton post :'transfert de fichier' je t'avais passe une source tu pense qu'elle peut m'etre utile ?
je pense aussi que le client et assez important car il doit receptionner le fichier et le recreer
sinon merci bcp
(je vais allez jeter un coup d'oeuil sur les source)

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
22 janv. 2005 à 22:13
au fait faut jamais se decourager

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
22 janv. 2005 à 22:16
oui je me souvient maintenant je comprenait pas ce que tu voulais faire (http://www.javafr.com/forum.v2.aspx?ID=336050) j'y suis en plein dedans maintenant lol

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_AbriBus Messages postés 492 Date d'inscription jeudi 28 août 2003 Statut Membre Dernière intervention 25 avril 2007 5
22 janv. 2005 à 22:33
Je suis pas completement décourager, mais j'ai d'autres priorité a present...(trouver un job en vrai lol)... si t'as des info ou besoin d'un coup de main... hesites pas...

BriBus
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
23 janv. 2005 à 11:38
ok merci pour tout

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
cs_Yenapa Messages postés 67 Date d'inscription samedi 12 juillet 2003 Statut Membre Dernière intervention 26 juin 2009
24 janv. 2005 à 23:10
Salut

Moi ce que je te conseille, c'est de coder le serveur d'abord
1) tu definit ton protocole (les sequences de commandes) par exemple:
Le client (C) se connecte au serveur (S)
S envoie: Bienvenue
C envoie: GET fichier
S envoie le fichier puis ferme la connection

2) quand t'a fait ca, tu peux t'ataquer aux sockets du client et du serveur:
Pour le serveur c pas compliqué. Tu ouvre une serversocket, et a chaque connection, tu accepte (tu met ca dans une boucle comme ca pas de probleme
Une fois que la connection est acceptée, tu peux te contenter d'envoyer un message et / ou d'afficher ce que le client envoie.

Pour te connecter a ce serveur, utilise Telnet (syntaxe: telnet hote port, par exemple telnet serveur 80)

3) Implemente les commandes dans ton serveur, avec un switch/case.
par exemple: "GET file" pour recuperer un fichier*, "GETAFTER file pos"* pour continuer le telechargement d'un fichier en commencant a l'octet pos,"GETBEFORE file nboct"* pour recuperer le debut d'un fichier (les nboct premiers octets) pour comparer avec un fichier deja existant (je m'explique plus loin), "INFO file" pour recuperer la taille et des infos supplementaires sur le fichier
* pour les get... il peut etre utile de demander une confirmation au client tout les n octets pour etre sur que la copie se passe bien et ne pas laisser le programme tourner si le client ne recoit rien (Timeout..)
...

Quand ca c'est fait, tu peux t'ataquer au client
C'est aussi simple
a) Se connecter
b) Si le fichier existe deja sur le client, comparer le debut (20 premiers octets pas exemple) pour voir si c'est le meme fichier. Je sais c'est pas tres propre mais a 23h g pas d'autre idée. Tu peux toujours faire un checksum, un md5 ou trouver un moyen maison de controler que le debut du fichier sur le client et le fichier du serveur concordent.
Bref.
On peut alors determiner si on peux reprendre la copie en utilisant le morceau deja copié, ou si il faut tout recommencer depuis le debut, ou meme annuler la copie.

c) Le serveur lit n octets dans le fichier, envoie ces n octets au client. Le client recoit ces n octets, les ecrits dans le fichier de destination, et envoie un message de confirmation au serveur

une fois que c fait, plus qu'a faire les ihm :D

Bon c peut etre pas tres clair... mais j'espere que ca pourra t'aider.

Bon courage
0
cs_AbriBus Messages postés 492 Date d'inscription jeudi 28 août 2003 Statut Membre Dernière intervention 25 avril 2007 5
25 janv. 2005 à 04:15
En fait, je crois que la vrai question etait "COMMENT fait on transiter des fichiers entre une application cliente et une application serveur ?"
0
cs_Yenapa Messages postés 67 Date d'inscription samedi 12 juillet 2003 Statut Membre Dernière intervention 26 juin 2009
25 janv. 2005 à 09:29
lol g mal compris
C simple, on lit un octet d'un coté et on le transmet.
de l'autre coté on le recoit, et on le stocke.
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
25 janv. 2005 à 18:58
pour l'instantje suis sur le serveur et ca marche impec sur telnet (g fait juste un truc d'affichage et de recuperation d'entree) mais voila maintenant que je me suis mis au client tout foire!!!!!
source du derveur :

package serveur;



import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;


public class serveur {


public static void main(String[] args) throws IOException {
ServerSocket s = new ServerSocket(8189);
System.out.println("serveur demare!!! en attente d'une connection...");
int i = 1;
for (;;) {
Socket incoming = s.accept();
System.out.println("connection acepter n°" + i);
System.out.println("Spawning " + i);
Thread t = new ChooseFile(incoming, i);
t.start();
i++;
}
}



}


class ChooseFile extends Thread {
public ChooseFile(Socket connect, int g) throws IOException {
f = connect;
g = connecte;
}


public void run() {


try {


BufferedReader in = new BufferedReader(new InputStreamReader(f
.getInputStream()));
out = new PrintWriter(f.getOutputStream(), true);


out
.println("vous etes connecte! voici le tableau des fichier disponible");
File[] tableau = new File[4];
File tom = new File("tomcat.exe");
File goo = new File("google.exe");
File hack = new File("hack.jpg");
File sh = new File("sh.rar");
tableau[0] = tom;
tableau[1] = goo;
tableau[2] = hack;
tableau[3] = sh;
out.println("\n[0]tomcat.exe");
out.println("\n[1]google.exe");
out.println("\n[3]hack.jpg");
out.println("\n[4]sh.rar");
out.println("\n[10]tout les fichier");
out.println("\nentre l'id correspondante au fichier que vous voulez telecharger");
System.out.println("\nen attente d'une entree clavier");
while(in.readLine()!=null){
String saisie = in.readLine();
if (saisie.equals("0")) {
download(tableau[0]);
} else if (saisie.equals("1")) {
download(tableau[1]);
} else if (saisie.equals("2")) {
download(tableau[2]);
} else if (saisie.equals("3")) {
download(tableau[3]);
} else if (saisie.equals("1")) {
download(tableau[4]);
} else if (saisie.equals("10")) {
for (int p = 0; p < tableau.length; p++) {
download(tableau[p]);
}
}else{out.println("\ncommande inconnu"); f.close();}
}
System.out.println("\nentree clavier receptionne");
} catch (Exception e) {
out.println("exception");
}
}


/**
* @param file
*/
public void download(File file) {


}


public int connecte;


public Socket f;


public PrintWriter out;
}

source du client :

import java.lang.System.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.*;


public class client {


public static void main(String[] args) throws UnknownHostException,
IOException {


Socket f = new Socket("127.0.0.1", 8189);
BufferedReader in = new BufferedReader(new InputStreamReader(f
.getInputStream()));
out = new PrintWriter(f.getOutputStream(), true);


do {
s = in.readLine();
System.out.println(s);
} while (in.readLine()!=null);


String saisie = JOptionPane.showInputDialog("entree votre choix ");
out.println(saisie);


}
public static String s;
public static PrintWriter out;
}

pour la transmition de fichier ce que je ferai c :
1) j'implenterai une methode pour recuperer le nom du fichier a partir du client
2) les bit du fichier a envoyer seron place dans un tableau
3)le tableau est envoyé
4)recuperation du tableau avec : (bit)in.readObject(); ou un truc de ce genre la
5) ecriture des bit sur le disque dur du client



"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
25 janv. 2005 à 19:42
au fait excuse moi Yenapa mais merci pour ta reponse je n'avais pas penser a implementer c methode mais d'ailleur je ne suis pas sur de le faire sauf si je voi que j'en ai besoin

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
cs_Yenapa Messages postés 67 Date d'inscription samedi 12 juillet 2003 Statut Membre Dernière intervention 26 juin 2009
25 janv. 2005 à 20:33
c juste pour te donner des idées, tu en fait ce que tu veux :)
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
25 janv. 2005 à 21:23
merci qd meme ;)

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
28 janv. 2005 à 21:44
ca y est g fini
abribus et au courant et les autre pour la source je vais laposter sur le site

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
Rejoignez-nous