Socket + Timeout + buffer en sortir [Java] - Java - Programmation
Marsh Posté le 12-06-2002 à 15:56:23
oh le vilain bide
(zut je retrouve pu l'image des chats )
Marsh Posté le 12-06-2002 à 16:17:15
Marsh Posté le 12-06-2002 à 16:55:32
DarkLord a écrit a écrit : Ca vous inspire qqch? |
ton outputstream, c'est pas un buffered au moins ?
Marsh Posté le 12-06-2002 à 17:05:42
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.
Marsh Posté le 12-06-2002 à 17:09:21
aucune exception ???
logiquement une IOException devrait etre lancée, c bizarre ton affaire ...
Marsh Posté le 12-06-2002 à 17:10:08
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.
Marsh Posté le 12-06-2002 à 17:12:22
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
Marsh Posté le 12-06-2002 à 17:20:41
Bah....J'ai des bufferedReader, et ça marche, moi....
A comprends pas!!
Marsh Posté le 12-06-2002 à 17:23:11
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
Marsh Posté le 12-06-2002 à 17:33:31
C zarb, ton truc, franchement...A comprends pas!
Faut que je fasse des essais!!
Marsh Posté le 12-06-2002 à 17:34:06
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.
Marsh Posté le 12-06-2002 à 17:52:06
Ah ouais!!
Le client :
Citation : |
Le serveur :
Citation : |
J'ai dû taper deux fois "0" pour avoir une exception...
Marsh Posté le 12-06-2002 à 17:53:09
exactement le genre de problème que j'ai ..
Marsh Posté le 12-06-2002 à 17:55:12
g fait pas mal de reseau en java, et g jamais vu ce probleme
Marsh Posté le 12-06-2002 à 18:30:27
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 ?
Marsh Posté le 12-06-2002 à 18:32:18
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 ....
Marsh Posté le 12-06-2002 à 18:39:46
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 .... |
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 ...
Marsh Posté le 12-06-2002 à 18:48:18
greg@freestarthu a écrit a écrit : oh le vilain bide (zut je retrouve pu l'image des chats ) |
Marsh Posté le 12-06-2002 à 18:54:04
ReplyMarsh Posté le 12-06-2002 à 19:43:53
gfive a écrit:
Citation : |
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 :
|
(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.
Marsh Posté le 12-06-2002 à 20:16:22
veryfree a écrit a écrit : http://very.free.free.fr/forum/bidecat.jpg |
merci !:-)
Marsh Posté le 13-06-2002 à 08:35:13
krosso a écrit a écrit : gfive 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é!
Marsh Posté le 13-06-2002 à 08:53:26
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.
Marsh Posté le 13-06-2002 à 08:59:00
krosso a écrit a écrit : J'essaierai avec un jdk1.3. |
jdk1.3.1_01 : exactement identique
Marsh Posté le 13-06-2002 à 09:38:51
Je crois comprendre le problème krosso
gfive >>> sous quel OS
krosso >>> sous quel OS
vous allez vite comprendre pq
Marsh Posté le 13-06-2002 à 09:41:58
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)
Marsh Posté le 13-06-2002 à 09:56:06
je parie que gfive est sous linux. Pour info j'ai cette erreur là que sous linux. Sous zidows ca fonctionne sans problème.
Marsh Posté le 13-06-2002 à 09:58:44
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...
Marsh Posté le 13-06-2002 à 09:59:14
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 ...
Marsh Posté le 13-06-2002 à 10:07:08
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 : |
où reader est un BufferedInputStream
En fait, l'évènement SERVERDIED est envoyé dans le cas où line == null.....
Ouala ouala...
Marsh Posté le 13-06-2002 à 10:07:38
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+
Marsh Posté le 13-06-2002 à 10:08:13
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.
Marsh Posté le 13-06-2002 à 10:19:35
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.
Marsh Posté le 13-06-2002 à 10:27:55
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
Marsh Posté le 13-06-2002 à 10:29:10
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
Marsh Posté le 13-06-2002 à 10:30:13
HappyHarry a écrit a écrit : testé sur une RH 7.2 pour dark hier soir, meme comportement |
dingue ca ...
Marsh Posté le 13-06-2002 à 10:31:21
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.
Marsh Posté le 13-06-2002 à 10:31:35
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
Marsh Posté le 13-06-2002 à 10:35:28
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)
Marsh Posté le 12-06-2002 à 15:33:35
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