Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1126 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [Java] Socket + Timeout + buffer en sortir

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

[Java] Socket + Timeout + buffer en sortir

n°157721
darklord
You're welcome
Posté le 12-06-2002 à 15:33:35  profilanswer
 

Yep,
 
La question est un peu bizarre mais si par chance quelqu'un a eu le même problème ...
 
J'ai un process qui envoie des requêtes sous forme XML et un autre process qui les récupère. Une communication classique via socket Java.
 
Le schéma est le suivant:
 
1. Server fonctionne
2. Le client démarre et ouvre une socket sur le server
3. Le client récupère un outputstream
4. Je fais un kill sur le serveur
5. Depuis mon client j'appelle
 
out.write(some bytes);
out.flush();
 
--> Aucune exception !!! (alors que clairement le serveur est down !!)
 
Ca vous inspire qqch?


---------------
Just because you feel good does not make you right
mood
Publicité
Posté le 12-06-2002 à 15:33:35  profilanswer
 

n°157766
greg@frees​tarthu
Posté le 12-06-2002 à 15:56:23  profilanswer
 

oh le vilain bide:)
 
(zut je retrouve pu l'image des chats :()

n°157803
darklord
You're welcome
Posté le 12-06-2002 à 16:17:15  profilanswer
 

:cry:


---------------
Just because you feel good does not make you right
n°157904
benou
Posté le 12-06-2002 à 16:55:32  profilanswer
 

DarkLord a écrit a écrit :

 
Ca vous inspire qqch?  




 
ton outputstream, c'est pas un buffered au moins ?

n°157926
darklord
You're welcome
Posté le 12-06-2002 à 17:05:42  profilanswer
 

benou a écrit a écrit :

 
 
ton outputstream, c'est pas un buffered au moins ?  




c'était et je le flushais à chaque requete. Puis j'ai essayé avec un outputstream tout simple et ca a exactement le même effet.


---------------
Just because you feel good does not make you right
n°157933
HappyHarry
Posté le 12-06-2002 à 17:09:21  profilanswer
 

aucune exception ???  :heink:
logiquement une IOException devrait etre lancée, c bizarre ton affaire ...


Message édité par HappyHarry le 06-12-2002 à 17:11:31
n°157936
darklord
You're welcome
Posté le 12-06-2002 à 17:10:08  profilanswer
 

dingue hein !! En fait la raison c'est que c'est bufférisé au niveau du stack tcp/ip et qu'il faut attendre que le stack soit plein pour avoir une erreur.
 
Et comme j'envoie peu de données à la fois.


---------------
Just because you feel good does not make you right
n°157943
HappyHarry
Posté le 12-06-2002 à 17:12:22  profilanswer
 

DarkLord a écrit a écrit :

dingue hein !! En fait la raison c'est que c'est bufférisé au niveau du stack tcp/ip et qu'il faut attendre que le stack soit plein pour avoir une erreur.
 
Et comme j'envoie peu de données à la fois.  




 
arf ok tu bufferises ... a ce moment la faut que tu reduises la taille du buffer sinon c ingérable ton histoire

n°157955
gfive
Posté le 12-06-2002 à 17:20:41  profilanswer
 

Bah....J'ai des bufferedReader, et ça marche, moi....
 
A comprends pas!!

n°157958
darklord
You're welcome
Posté le 12-06-2002 à 17:23:11  profilanswer
 

HappyHarry a écrit a écrit :

 
 
arf ok tu bufferises ... a ce moment la faut que tu reduises la taille du buffer sinon c ingérable ton histoire  




 
négatif. je ne bufférises pas. Chaque socket a un buffer dans la pile TCP/IP
 
--> Je ne peux pas gérer ca. Et meme en changeant les propriétés de la socket ca change rien :(


---------------
Just because you feel good does not make you right
mood
Publicité
Posté le 12-06-2002 à 17:23:11  profilanswer
 

n°157967
gfive
Posté le 12-06-2002 à 17:33:31  profilanswer
 

C zarb, ton truc, franchement...A comprends pas!  
Faut que je fasse des essais!!

n°157968
darklord
You're welcome
Posté le 12-06-2002 à 17:34:06  profilanswer
 

gfive a écrit a écrit :

C zarb, ton truc, franchement...A comprends pas!  
Faut que je fasse des essais!!  




 
bin tu fais un bete serveur en Java, un bete client en java et normallement tu devrais avoir l'erreur comme moi.


---------------
Just because you feel good does not make you right
n°157988
gfive
Posté le 12-06-2002 à 17:52:06  profilanswer
 

Ah ouais!!  
 
 
Le client :  
 
 

Citation :


import java.net.*;
import java.io.*;
 
public class TestClient {
 
    public TestClient(String host, int port) {
 OutputStream out = null;
 String ping = new String("ping" );
 byte[] b = ping.getBytes();
 try {
     Socket so = new Socket(host, port);
     out = so.getOutputStream();
     while (true) {
  char c = (char) System.in.read();
  if (c == '0';) {
      System.out.println("Ping!" );
      out.write(b);
      out.flush();  
  }
     }
 } catch (Exception e) {
     e.printStackTrace(System.out);
 }
    }
 
    public static void main(String[] args) {
 new TestClient(args[0], Integer.parseInt(args[1]));
    }
}

 
 
 
Le serveur :  
 

Citation :


 
import java.net.*;
import java.io.*;
 
public class Test {
 
     
    public Test(int port) {
 try {
     ServerSocket server = new ServerSocket(port);
     while (true) {
  Socket s = server.accept();
  System.out.println("[Server] : got a client!" );
     }
 } catch (Exception e) {
     e.printStackTrace(System.out);
 }
    }
 
    public static void main(String[] args) {
 new Test(Integer.parseInt(args[0]));
    }
}

 
 
J'ai dû taper deux fois "0" pour avoir une exception...

n°157991
darklord
You're welcome
Posté le 12-06-2002 à 17:53:09  profilanswer
 

exactement le genre de problème que j'ai ..


---------------
Just because you feel good does not make you right
n°157994
HappyHarry
Posté le 12-06-2002 à 17:55:12  profilanswer
 

g fait pas mal de reseau en java, et g jamais vu ce probleme  :??:

n°158009
benou
Posté le 12-06-2002 à 18:30:27  profilanswer
 

mais bon, dark, si c'est du XML que tu envoies, les données sont assez grosses => le buffer IP sera pas assez gros pour te poser des problèmes ...  
pkoi ca te pose problème ?

n°158010
darklord
You're welcome
Posté le 12-06-2002 à 18:32:18  profilanswer
 

benou a écrit a écrit :

mais bon, dark, si c'est du XML que tu envoies, les données sont assez grosses => le buffer IP sera pas assez gros pour te poser des problèmes ...  
pkoi ca te pose problème ?  




 
bin si il est assez gros. En fait la première requete passe sans problème au niveau java (buffer du stack ip). La deuxième se crashe. Mais en attendant mon back end pense que la requete 1 a été envoyée, ce qui est plutôt bizarre ....


---------------
Just because you feel good does not make you right
n°158012
benou
Posté le 12-06-2002 à 18:39:46  profilanswer
 

DarkLord a écrit a écrit :

 
 
bin si il est assez gros. En fait la première requete passe sans problème au niveau java (buffer du stack ip). La deuxième se crashe. Mais en attendant mon back end pense que la requete 1 a été envoyée, ce qui est plutôt bizarre ....  




[:darklord]
c'est étonnant que que le buffer du stack ip soit capable de garder une requête entière !!!!  
t'imagine la perte de perf que ca implique ? tant que c'est pas envoyé, t'es pas près d'avoir la réponse ...
 
je suis très très septique ...

n°158019
veryfree
Posté le 12-06-2002 à 18:48:18  profilanswer
 

greg@freestarthu a écrit a écrit :

oh le vilain bide:)
 
(zut je retrouve pu l'image des chats :()  




 
http://very.free.free.fr/forum/bidecat.jpg

n°158023
benou
Posté le 12-06-2002 à 18:54:04  profilanswer
 

veryfree a écrit a écrit :

 
 
http://very.free.free.fr/forum/bidecat.jpg  




:D

n°158039
krosso
j'suis à la bourre
Posté le 12-06-2002 à 19:43:53  profilanswer
 

gfive a écrit:
 

Citation :


Le client :  
...snip...
 
Le serveur :  
...snip...
 
J'ai dû taper deux fois "0" pour avoir une exception...


J'ai testé ces client et serveur.
J'ai lancé 2 clients et tapé '0' des tas de fois et ça ne fait rien de spécial à part me répondre ping!
 
Ensuite j'ai killé le serveur et boum au premierr 0 suivant :

Code :
  1. java.net.SocketException: Connection reset by peer: socket write error
  2.         at java.net.SocketOutputStream.socketWrite0(Native Method)
  3.         at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
  4.         at java.net.SocketOutputStream.write(SocketOutputStream.java:114)
  5.         at TestClient.<init>(TestClient.java:17)
  6.         at TestClient.main(TestClient.java:27)


 
(avec jdk1.4).
 
Sinon Dark, tu ferais pas du multithread ?
Genre: tu killes ton serveur mais la socket est gérée par un thread qui continue de vivre ?
 
K.


Message édité par krosso le 06-12-2002 à 19:47:07
n°158053
greg@frees​tarthu
Posté le 12-06-2002 à 20:16:22  profilanswer
 

veryfree a écrit a écrit :

 
 
http://very.free.free.fr/forum/bidecat.jpg  




merci !:-)


---------------
\^o^/ Libérez HotShot \^o^/
n°158172
gfive
Posté le 13-06-2002 à 08:35:13  profilanswer
 

krosso a écrit a écrit :

gfive a écrit:
 

Citation :


Le client :  
...snip...
 
Le serveur :  
...snip...
 
J'ai dû taper deux fois "0" pour avoir une exception...


J'ai testé ces client et serveur.
J'ai lancé 2 clients et tapé '0' des tas de fois et ça ne fait rien de spécial à part me répondre ping!
 
Ensuite j'ai killé le serveur et boum au premierr 0 suivant :

Code :
  1. java.net.SocketException: Connection reset by peer: socket write error
  2.         at java.net.SocketOutputStream.socketWrite0(Native Method)
  3.         at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
  4.         at java.net.SocketOutputStream.write(SocketOutputStream.java:114)
  5.         at TestClient.<init>(TestClient.java:17)
  6.         at TestClient.main(TestClient.java:27)


 
(avec jdk1.4).
 
Sinon Dark, tu ferais pas du multithread ?
Genre: tu killes ton serveur mais la socket est gérée par un thread qui continue de vivre ?
 
K.  




 
 
Ouais, si tu envoies des tas de ping, ça crashera au premier que tu envoies après avoir killé le serveur.. Le problème se pose si tu killes le serveur sans avoir encore rien envoyé!

n°158180
krosso
j'suis à la bourre
Posté le 13-06-2002 à 08:53:26  profilanswer
 

gfive a écrit a écrit :

 
Ouais, si tu envoies des tas de ping, ça crashera au premier que tu envoies après avoir killé le serveur.. Le problème se pose si tu killes le serveur sans avoir encore rien envoyé!  




Ca change rien.
1. démarrage serveur
2. démarrage client (serveur dit "got a client!" )
3. kill serveur (ctrl+c)
4. côté client envoi "0", affichage de "ping!" et plonk Exception aussi sec!
Bin je n'arrive pas à reproduire votre truc.
J'essaierai avec un jdk1.3.
 
K.

n°158183
krosso
j'suis à la bourre
Posté le 13-06-2002 à 08:59:00  profilanswer
 

krosso a écrit a écrit :

 
J'essaierai avec un jdk1.3.




 
jdk1.3.1_01 : exactement identique

n°158200
darklord
You're welcome
Posté le 13-06-2002 à 09:38:51  profilanswer
 

Je crois comprendre le problème krosso
 
gfive >>> sous quel OS
krosso >>> sous quel OS  
 
vous allez vite comprendre pq :)


---------------
Just because you feel good does not make you right
n°158202
krosso
j'suis à la bourre
Posté le 13-06-2002 à 09:41:58  profilanswer
 

DarkLord a écrit a écrit :

Je crois comprendre le problème krosso
 
gfive >>> sous quel OS
krosso >>> sous quel OS  
 
vous allez vite comprendre pq :)  




 
at home: win xp home (pour les posts de hier soir)
at work: win 2000 prof (pour les posts de ce matin)

n°158206
darklord
You're welcome
Posté le 13-06-2002 à 09:56:06  profilanswer
 

je parie que gfive est sous linux. Pour info j'ai cette erreur là que sous linux. Sous zidows ca fonctionne sans problème.


---------------
Just because you feel good does not make you right
n°158210
krosso
j'suis à la bourre
Posté le 13-06-2002 à 09:58:44  profilanswer
 

DarkLord a écrit a écrit :

je parie que gfive est sous linux. Pour info j'ai cette erreur là que sous linux. Sous zidows ca fonctionne sans problème.  




Ca pourrait être l'explication en effet.
Je vais réveiller mon vieux 486 qui tourne avec une RH5.0, mais il est chez moi, donc pas avant ce soir vers 22h00...

n°158212
HappyHarry
Posté le 13-06-2002 à 09:59:14  profilanswer
 

DarkLord a écrit a écrit :

je parie que gfive est sous linux. Pour info j'ai cette erreur là que sous linux. Sous zidows ca fonctionne sans problème.  




 
hier soir quand je t repondu sur MSN g testé sous nux aussi ...

n°158220
gfive
Posté le 13-06-2002 à 10:07:08  profilanswer
 

Bon, effectivement, je suis sous Linux..Par contre, avec mon serveur de chat, si je tue le serveur comme un gros porc (un kill sur le process, quoi) j'ai bien une déconnection immédiate côté client.
 
Le code du client :  

Citation :


   public void run() {
        String line;
        while (thread != null) {
            try {
                if ((line = reader.readLine()) != null) {
                    fireEvent(line);
                } else {
                    fireEvent(NetworkEvent.SERVERDIED);
                }
            } catch (IOException ioe) {
                fireEvent(NetworkEvent.SERVERDIED);
            }
            thread.yield();
        }  
    }  

 
 
où reader est un BufferedInputStream
 
En fait, l'évènement SERVERDIED est envoyé dans le cas où line == null.....
 
Ouala ouala...

n°158221
darklord
You're welcome
Posté le 13-06-2002 à 10:07:38  profilanswer
 

c'est dépendant. J'ai démarré le servur sous mon laptop Win2K et le client sur la machine linux en question. J'ai un "connection lost" dès que je ferme le serveur
 
---> Dépendant à l'OS et linux ne se comporte pas comme windows ce qui est assez intéressant à savoir !!!
 
A+


---------------
Just because you feel good does not make you right
n°158223
darklord
You're welcome
Posté le 13-06-2002 à 10:08:13  profilanswer
 

ceci dit, en production le serveur est sur une machine Windows donc moi ca m'arrange bien mais bon c'est une expérience non négligable qd on devra faire des serveurs sous linux.


---------------
Just because you feel good does not make you right
n°158234
benou
Posté le 13-06-2002 à 10:19:35  profilanswer
 

DarkLord a écrit a écrit :

ceci dit, en production le serveur est sur une machine Windows donc moi ca m'arrange bien mais bon c'est une expérience non négligable qd on devra faire des serveurs sous linux.  




ouep. intéressnt à savoir. Mais je suis quand même très étonné ... t'as testé sur une autre machine linux ? c'est peut être une config space sur ta machine.

n°158254
darklord
You're welcome
Posté le 13-06-2002 à 10:27:55  profilanswer
 

benou a écrit a écrit :

 
ouep. intéressnt à savoir. Mais je suis quand même très étonné ... t'as testé sur une autre machine linux ? c'est peut être une config space sur ta machine.  




 
yaiss


---------------
Just because you feel good does not make you right
n°158259
HappyHarry
Posté le 13-06-2002 à 10:29:10  profilanswer
 

benou a écrit a écrit :

 
ouep. intéressnt à savoir. Mais je suis quand même très étonné ... t'as testé sur une autre machine linux ? c'est peut être une config space sur ta machine.  




 
testé sur une RH 7.2 pour dark hier soir, meme comportement

n°158262
benou
Posté le 13-06-2002 à 10:30:13  profilanswer
 

HappyHarry a écrit a écrit :

 
testé sur une RH 7.2 pour dark hier soir, meme comportement  




dingue ca ...

n°158265
darklord
You're welcome
Posté le 13-06-2002 à 10:31:21  profilanswer
 

benou a écrit a écrit :

 
dingue ca ...  




 
ouais mais d'un coté je suis super content d'avoir cette expérience en poche. Ca va m'être sans doute utile un jour ou l'autre.


---------------
Just because you feel good does not make you right
n°158267
HappyHarry
Posté le 13-06-2002 à 10:31:35  profilanswer
 

benou a écrit a écrit :

 
dingue ca ...  




 
sans doute une histoire d'optimisation de la pile TCP de nux qui fait ca ...
si qq'un peut tester sur un BSD ou un Solaris ca serait bien

n°158276
krosso
j'suis à la bourre
Posté le 13-06-2002 à 10:35:28  profilanswer
 

HappyHarry a écrit a écrit :

 
 
sans doute une histoire d'optimisation de la pile TCP de nux qui fait ca ...
si qq'un peut tester sur un BSD ou un Solaris ca serait bien  




 
Ca y est!
J'ai enfin pu le reproduire sur une solaris 5.6:
505 - java -classpath . TestClient 127.0.0.1 6589
0
Ping!
0
Ping!
java.io.IOException: Broken pipe
        at java.net.SocketOutputStream.socketWrite(Native Method)
        at java.net.SocketOutputStream.write(SocketOutputStream.java:75)
        at TestClient.<init>(Compiled Code)
        at TestClient.main(TestClient.java:27)
[10:34:49]:[/xxxxxxxxx]:[]
506 - java -version
java version "1.2.1"
Solaris VM (build Solaris_JDK_1.2.1_02, native threads, sunwjit)


Message édité par krosso le 13-06-2002 à 10:36:07
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Java] Socket + Timeout + buffer en sortir

 

Sujets relatifs
Java et Langage C[Java]Comment desactiver le garbage collector ?
[JAVA] Lecture d'un fichier texte[Java] copie de fichier et de repertoire
Envoyer un fax depuis un modem en Java ?[Java] Comment ouvrir une page html à partir d'une application Java ?
[JAVA] erreur lors de l'installation de jedit PB de -jarmise en page du code java
Comment on installe Java sous Linux ?Client/Serveur Java/Perl
Plus de sujets relatifs à : [Java] Socket + Timeout + buffer en sortir


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR