France Hardware : Forums de discussion
Retrouvez les prix près de chez vous :  
Index du forum | Liste des membres | Liste des groupes | Inscription | F-A-Q | Recherche
Pseudo :    Password :     
22 870 membres enregistrés - 1 892 738 posts - 97 040 topics
Index des forums FH  | Index des forums DegroupNews
      Programmation
           Langages Web
                [JAVA] se connecter sur un port IP distant [new question 07/03/06]
27 connectés(record : 207 le 05 juin 2007 - 05 h 23)

Vous devez vous connecter pour répondre au topic.
Precedent | 1,2,3,4,5,6,7,8,9
[JAVA] se connecter sur un port IP distant [new question 07/03/06]

kha
Google is your best friend

Messages : 1 235
Inscrit le 01/03/02
Ville : Montreal
Non connecté
  Posté le 03 janvier 2006 - 00 h 51 m 24 s
Reprise du message précédent :

    Code     
  1. // prout
  2. import java.io.IOException;
  3. import java.net.ServerSocket;
  4. import java.net.Socket;
  5. import java.text.DateFormat;
  6. import java.text.SimpleDateFormat;
  7. import java.util.ArrayList;
  8. import java.util.Collections;
  9. import java.util.Date;
 10. import java.util.Iterator;
 11. import java.util.List;
 12. 
 13. public final class Forwarder implements Runnable
 14. {
 15.     private final List clients;
 16.     private final ServerSocket server;
 17.     private final Socket remote;
 18.     private Thread runner;
 19.     
 20.     public Forwarder(String remoteHost, int remotePort, int localPort) throws IOException
 21.     {
 22.         clients = Collections.synchronizedList(new ArrayList());
 23.         System.out.println("[Forwarder] Creating forwarding server...");
 24.         server = new ServerSocket(localPort);
 25.         System.out.println("[Forwarder] Connecting to remote host...");
 26.         remote = new Socket(remoteHost, remotePort);
 27.     }
 28.     
 29.     public void start()
 30.     {
 31.         if (runner == null)
 32.         {
 33.             System.out.println("[Forwarder] Starting forwarding process...");
 34.             runner = new Thread(this, "ForwarderThread");
 35.             runner.start();
 36.             
 37.             System.out.println("[Forwarder] Forwarding data from remote host to clients...");
 38.             try
 39.             {
 40.                 byte b[] = new byte[4096];
 41.                 int c;
 42.                 while ((c = remote.getInputStream().read(b)) != -1)
 43.                 {
 44.                     for (Iterator i = clients.iterator(); i.hasNext();)
 45.                     {
 46.                         ForwarderClient client = (ForwarderClient) i.next();
 47.                         client.getClient().getOutputStream().write(b, 0, c);
 48.                     }
 49.                 }
 50.                 server.close();
 51.                 remote.close();
 52.             }
 53.             catch (IOException e)
 54.             {
 55.                 e.printStackTrace();
 56.             }
 57.         }
 58.     }
 59.     
 60.     public void run()
 61.     {
 62.         while(runner != null && server.isBound() && !server.isClosed())
 63.         {
 64.             try
 65.             {
 66.                 System.out.println("[ForwarderThread] Forwarder is listening for clients to connect...");
 67.                 clients.add(new ForwarderClient(server.accept()));
 68.             }
 69.             catch (IOException e)
 70.             {
 71.                 e.printStackTrace();
 72.             }
 73.         }
 74.     }
 75.     
 76.     private final class ForwarderClient implements Runnable
 77.     {
 78.         private final Socket client;
 79.         
 80.         private ForwarderClient(Socket client)
 81.         {
 82.             this.client = client;
 83.             String name = "ForwarderClientThread (" + client.getInetAddress().getHostName() + ":" + client.getPort() + ")";
 84.             System.out.println("[ForwarderClient] New " + name);
 85.             new Thread(this, name).start();
 86.         }
 87. 
 88.         public void run()
 89.         {
 90.             try
 91.             {
 92.                 byte b[] = new byte[4096];
 93.                 int c;
 94.                 System.out.println("[" + Thread.currentThread().getName() + "] Receiving data from client...");
 95.                 while ((c = client.getInputStream().read(b)) != -1)
 96.                 {
 97.                     remote.getOutputStream().write(b, 0, c);
 98.                 }
 99.             }
100.             catch (IOException e)
101.             {
102.                 System.out.println("[" + Thread.currentThread().getName() + "] Disconnected...");
103.             }
104.             try
105.             {
106.                 client.close();
107.             }
108.             catch (IOException e)
109.             {
110.                 e.printStackTrace();
111.             }
112.             clients.remove(this);
113.         }
114. 
115.         public final Socket getClient()
116.         {
117.             return client;
118.         }
119.     }
120. 
121.     // EXAMPLE OF USE
122.     // 1. Start this program
123.     // 2. Start several Telnet to localhost
124.     public static void main(String[] args) throws IOException
125.     {
126.         // Start a fake a remote iterative server on port 1111. You can connect with telnet localhost 1111 to test what it does
127.         
128.         new Thread(new Runnable() 
129.         {
130.             public void run()
131.             {
132.                 boolean active = true;
133.                 try
134.                 {
135.                     final DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss \r\n");
136.                     final ServerSocket ss = new ServerSocket(1111);
137.                     System.out.println("[FakeServerThread] FAKE SERVER STARTED !");
138.                     final Socket s = ss.accept();
139.                     byte b[]  = new byte[4096];
140.                     while (active)
141.                     {
142.                         int i = s.getInputStream().read(b);
143.                         System.out.println("[FakeServerThread] Received from the forwarder: " + new String(b, 0, i - 1));
144.                         s.getOutputStream().write(df.format(new Date()).getBytes());
145.                         Thread.sleep(1000);
146.                     }
147.                     s.close();
148.                     ss.close();
149.                 }
150.                 catch (IOException e)
151.                 {
152.                     active = false;
153.                 }
154.                 catch (InterruptedException e)
155.                 {
156.                     e.printStackTrace();
157.                 }
158.             }
159.         }, "FakeServerThread").start();
160.         
161.         // Connect to the fake remote server
162.         
163.         new Forwarder("localhost", 1111, 23).start();
164.     }
165. }
166. 




Florent42
Eh oui cette ville existe...;)

Messages : 2 459
Inscrit le 14/12/03
Ville : Saint-Etienne uniquement(pas de voiture)
Non connecté
  Posté le 03 janvier 2006 - 18 h 41 m 42 s
merci pour tes explications!
j etais effectivement a cote de la plaque...

merci pour le code,mais c bizarre j arrive bien a l executer sans problème, mais si d'après l exemple je fait un telnet localhost 1111 ben ca fait rien au niveau de eclipse



- je cherche un emploi
ICI


Florent42
Eh oui cette ville existe...;)

Messages : 2 459
Inscrit le 14/12/03
Ville : Saint-Etienne uniquement(pas de voiture)
Non connecté
  Posté le 03 janvier 2006 - 18 h 47 m 42 s
je corrige:

qd j ecris via un telnet localhost, je vois bien des données passer dans eclipse

par contre rien sur le port 1111



- je cherche un emploi
ICI


Florent42
Eh oui cette ville existe...;)

Messages : 2 459
Inscrit le 14/12/03
Ville : Saint-Etienne uniquement(pas de voiture)
Non connecté
  Posté le 13 janvier 2006 - 18 h 39 m 20 s
non?



- je cherche un emploi
ICI


kha
Google is your best friend

Messages : 1 235
Inscrit le 01/03/02
Ville : Montreal
Non connecté
  Posté le 14 janvier 2006 - 01 h 09 m 06 s
tu fais qq chose de pas corect. ca marche bien chez moi. essaie de comprendre le code.




Florent42
Eh oui cette ville existe...;)

Messages : 2 459
Inscrit le 14/12/03
Ville : Saint-Etienne uniquement(pas de voiture)
Non connecté
  Posté le 21 janvier 2006 - 11 h 55 m 41 s
en essayant de comprendre le code:

j envoi des données sur le port 23

le programme le recupère et les réenvoi sur le port 1111

et voila ce que ca donne:



- je cherche un emploi
ICI


Florent42
Eh oui cette ville existe...;)

Messages : 2 459
Inscrit le 14/12/03
Ville : Saint-Etienne uniquement(pas de voiture)
Non connecté
  Posté le 21 janvier 2006 - 12 h 01 m 18 s
avec :
en haut a droite: le programme
en haut a gauche: le telnet localhost 23
en bas a droite: le telnet localhost 1111



- je cherche un emploi
ICI


kha
Google is your best friend

Messages : 1 235
Inscrit le 01/03/02
Ville : Montreal
Non connecté
  Posté le 22 janvier 2006 - 17 h 49 m 16 s
T as pas compris !!!

Tu as lu mes commentairesen vert ??

// Start a fake a remote iterative server on port 1111. You can connect with telnet localhost 1111 to test what it does

Le main sert a TESTER ma classe. Pour la tester il faut que je simule un serveur !!! En gros ca correspond a ton serveur a toi !!!

j ai ecris que c est un serveur ITERATIF ! Donc s'il est pas parallele, comment veut tu qu il accepte plus d'une connexion en meme temps !

Voila comment ca fonctionne :
1. Le serveur fake se lance (en gros c est comme si tu avais un serveur iteratif chez toi)
2. Le forwarder se connecte au serveur iteratif et ecoute sur un port de ton pc, 23 en l'occurence. Comme le forwarder est en mode paralelle, lui au moins peu accepter plusieurs clients !!!
3. Lance plusieurs telnet sur localhost port 23 pour verifier !!!




kha
Google is your best friend

Messages : 1 235
Inscrit le 01/03/02
Ville : Montreal
Non connecté
  Posté le 22 janvier 2006 - 17 h 51 m 06 s
Si tu veux utiliser mon code, il faut que tu te cree une classe java avec un main et que tu utilise :

new Forwarder("localhost", 1111, 23).start();

localhost est l'addresse du serveur iteratif, 1111 le port de ce serveur et 23 le port sur lequel tu veux ecouter plusieurs client.

=> En gros c'est un code qui te permet de transformer un serveur iteractif qui n'accepte qu'un seul client en un serveur paralelle qui accepte plsuieurs clients a la fois SUR LE MEME PORT




Florent42
Eh oui cette ville existe...;)

Messages : 2 459
Inscrit le 14/12/03
Ville : Saint-Etienne uniquement(pas de voiture)
Non connecté
  Posté le 07 mars 2006 - 22 h 08 m 09 s
j ai compris ca marche!!

merci kha!



- je cherche un emploi
ICI


Florent42
Eh oui cette ville existe...;)

Messages : 2 459
Inscrit le 14/12/03
Ville : Saint-Etienne uniquement(pas de voiture)
Non connecté
  Posté le 07 mars 2006 - 22 h 35 m 13 s
un petite question sur ton code initial.

j ai trouve un code sur internet ce code la:
    Code     
 1. Properties sys = System.getProperties();
 2. String os = sys.getProperty("os.name");
 3. Runtime r = Runtime.getRuntime();
 4. try {
 5. if (os.endsWith("NT")||os.endsWith("2000")||os.endsWith("XP"))
 6. r.exec("cmd /c start http://192.168.1.2/");
 7. else
 8. r.exec("start http://serveur/");
 9. } catch (IOException ex) {
10. ex.printStackTrace();
11. }


comment recuperer des donnees (genre number et caller par exemple) et les envoyer en argument dans l'url genre:
http://192.168.1.2/essai.php?number=05656767&caller=687

j ai essaye de trouver mais sans resultat...



- je cherche un emploi
ICI


Florent42
Eh oui cette ville existe...;)

Messages : 2 459
Inscrit le 14/12/03
Ville : Saint-Etienne uniquement(pas de voiture)
Non connecté
  Posté le 08 mars 2006 - 12 h 48 m 02 s
je retire ce que j'ai dit ca marche bien

grace a ton code kha, (en le modifiant un peu) je peux faire de la remontée de fiche avec notre intranet :)

attendre et voir maintenant si c est correct en utilisation intensive



- je cherche un emploi
ICI


Precedent | 1,2,3,4,5,6,7,8,9
Page genérée en 1.8434 secondes par RahForum 2.0 | Gzip off |  Stats |  Metaforums |  RSS
© 2004 Cerbere Systems.
Prix Matériel Informatique | Informatique Lyon | Informatique Grenoble | Informatique Annecy | Informatique Marseille | Informatique Bordeaux | Forum Informatique
ADSL |Actualité ADSL | e-commerce | Commande Au Volant
Creative Commons
Message Boards and Forums Directory