sheorogath
Messages postés2448Date d'inscriptionsamedi 21 février 2004StatutModérateurDernière intervention29 janvier 2010
-
21 janv. 2005 à 21:48
sheorogath
Messages postés2448Date d'inscriptionsamedi 21 février 2004StatutModérateurDernière intervention29 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"
cs_AbriBus
Messages postés492Date d'inscriptionjeudi 28 août 2003StatutMembreDernière intervention25 avril 20075 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
sheorogath
Messages postés2448Date d'inscriptionsamedi 21 février 2004StatutModérateurDernière intervention29 janvier 201017 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"
cs_AbriBus
Messages postés492Date d'inscriptionjeudi 28 août 2003StatutMembreDernière intervention25 avril 20075 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...
cs_Yenapa
Messages postés67Date d'inscriptionsamedi 12 juillet 2003StatutMembreDernière intervention26 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.
sheorogath
Messages postés2448Date d'inscriptionsamedi 21 février 2004StatutModérateurDernière intervention29 janvier 201017 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 :
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 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);
}
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"
sheorogath
Messages postés2448Date d'inscriptionsamedi 21 février 2004StatutModérateurDernière intervention29 janvier 201017 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"