cs_othmane19
Messages postés5Date d'inscriptionjeudi 30 décembre 2010StatutMembreDernière intervention12 novembre 2011
-
10 nov. 2011 à 16:47
cs_othmane19
Messages postés5Date d'inscriptionjeudi 30 décembre 2010StatutMembreDernière intervention12 novembre 2011
-
12 nov. 2011 à 23:22
Bonjour,
en faite je voulais envoyer un fichier d'un client a un serveur en utilisant socket java j'ai réussi a faire un transfert direct entre:
client----------->serveur(entre 2 machine en local)
je cherche a le faire en passant par plusieurs serveur intermédiaire(en local ):exemple client--->serveur1----->serveur2---->serveur final
le client envoi le fichier a serveur1 qui le relaye jusqu'à a l'arrivé au serveur final.
voici mon code pour l'envoi directe (sachant que j ai prevoyé l'envoi dune liste pour le chemin mais ca c'est la 2 étape..)
classe client
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author othmane
*/
public class client1
{
public static void main(String[] args) throws IOException
{
// En-tête Ã* envoyer
String[] tab = {"Serveur1", "Serveur2","Serveur3", "Client"};
// Ouverture de la communication
Socket sock = new Socket(InetAddress.getLocalHost(),9001);
ObjectOutputStream out = new ObjectOutputStream(sock.getOutputStream());
// Envoi de l'en-tête
out.writeInt(tab.length);
for (int i=0; i<tab.length; i++)
out.writeUTF(tab[i]);
// Envoi du fichier
commun.transfert(
new FileInputStream(new File("C:\\M1\\oth.png")),
out,
true);
// Fermeture de la communication
sock.close();
}
}
classe serveur
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author othmane
*/
public class serveur1
{
public static void main(String[] args) throws IOException
{
// Ouverture d'une communication
Socket sock = new ServerSocket(9001).accept();
ObjectInputStream in = new ObjectInputStream(sock.getInputStream());
public static void transfert(InputStream in, OutputStream out, boolean closeOnExit) throws IOException
{
byte buf[] = new byte[1024];
int n;
while((n=in.read(buf))!=-1)
out.write(buf,0,n);
if (closeOnExit)
{
in.close();
out.close();
}
}
}
avez vous une idée sur le code pour réussir ca
merci de votre compréhension
merci de votre aide d'avance
cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 juillet 2020371 10 nov. 2011 à 19:33
Bonjour,
Admettons que tu as réussi a envoyer des données d'un serveur A vers un serveur B. Et que ce programme s'appelle Envoi
Ce qu'il te reste à faire est de créer les programmes s'exécutant sur les relais.
Pour cela, je te conseil de créer un dossier nommé par exemple "depot" sur les serveurs relais. Ensuite, tu peux créer un programme que tu appelles Surveillant et qui vérifie s'il y a des fichiers dans le dossier depot et qui s'il y a des fichier récupère les noms pour appeler ton programme Envoi.
Le programme Surveillant est assez simple à réaliser, il te suffit de vérifier le contenu du répertoire dépôt toutes les secondes par exemple.
cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 juillet 2020371 10 nov. 2011 à 19:35
Je ne sais pas exactement ce que tu cherches à faire mais, si ton travail se limite à ce que tu décris, je ne pense pas que java soit le langage le plus adapté. Les langages système (batch, shell) sont vraiment adaptés pour ce genre de travail.
cs_othmane19
Messages postés5Date d'inscriptionjeudi 30 décembre 2010StatutMembreDernière intervention12 novembre 2011 10 nov. 2011 à 21:34
merci pour ta reponse en bref ce que je cherche c'est envoyer un fichier da A vers D en passant par B et C donc le but est simple
et en ce qui concerne lz 2 etape c'est de pouvoir calculer le chemin
(ca j en parle pas pour le moment).s'il vous plait si vous pouvez me debloquer je serai trés reconnaissant
donc je cherche le code qui va pouvoir relayer le fichier sachant que je vous ai montré le code utilisé pour l'envoi de A vers B
donc je pense que c'est claire
cs_othmane19
Messages postés5Date d'inscriptionjeudi 30 décembre 2010StatutMembreDernière intervention12 novembre 2011 11 nov. 2011 à 01:45
merci pour ta réponse
le but est simple lancer des machine en local
A B C D
envoyer un fichier de A a D
en passant par B et C
A-->B--->C--->D
de A vers D en passant par B et C
tous ca constitue un réseau logique q on doit pouvoir simuler en local
je pense que y pas plus claire que ca comme but
merci pour votre aide d'avance
cs_othmane19
Messages postés5Date d'inscriptionjeudi 30 décembre 2010StatutMembreDernière intervention12 novembre 2011 12 nov. 2011 à 23:22
j'ai reussi en se basant juste sur les numero de port
et voila le code j'ai savoir q est ce que t on pense
j ai simuler un envoi de client vers serveur en passant par A et B et C
s il te plait dit q est ce que tu en pense
et merci de votre aide
pour la classe commun j ai gardé la même:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
client
public class cl
{
public static void main(String[] args) throws IOException
{
Socket sock = new Socket(InetAddress.getLocalHost(),9001);