Toon posts:

[JAVA] Chatclient crash OS afhankelijk

Pagina: 1
Acties:
  • 136 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb een chatserver en een chatclient geschreven in java. Soms crasht ("hangt") de client bij het inloggen, soms niet. Ik kan geen fouten vinden in zowel de server als de client. Het is me wel opgevallen dat met windows 98 alles goed gaat en met win2k niet (winXP ook niet lekker).
De client is gecompiled met JDK 1.1.8 zodat elke chatter met wat voor pc ook in ieder geval kan chatten. Het hangen van de client is het vastlopen van de thread neem ik aan? Internet explorer reageert namelijk dan nergens meer op en je moet het eruit kicken met ctrl+alt+del.

De vraag is dus: Heeft iemand een idee waarom dit wel op een win2k machine gebeurd en niet op een win98 machine.
PS. Heb meerdere win98 en win2k machines geprobeerd.

  • momania
  • Registratie: Mei 2000
  • Nu online

momania

iPhone 30! Bam!

Welke runtime versie gebruik je om de client te draaien?
En misschien kan je eens een stukje code posten van het client gedeelte waarmee de verbinding tot stand komt?

Neem je whisky mee, is het te weinig... *zucht*


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Doet de boel het wel in de appletviewer op beide platformen? Probeer eens met de debugger door de code te lopen en kijk waar de boel blijft hangen :)

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Verwijderd schreef op 10 March 2003 @ 11:42:
De vraag is dus: Heeft iemand een idee waarom dit wel op een win2k machine gebeurd en niet op een win98 machine.
PS. Heb meerdere win98 en win2k machines geprobeerd.
Win98 heeft nauwelijks tot geen errorchecking ivm Win2k (en XP = zelfde kernel als 2k). Een willekeurige andere Win98-bak zou hetzelfde probleem wel eens kunnen hebben dus... oftewel geloof de resultaten van de Win2k bak en ga op een van die machines debuggen.
Het hangen van de client is het vastlopen van de thread neem ik aan? Internet explorer reageert namelijk dan nergens meer op en je moet het eruit kicken met ctrl+alt+del.
IE vertoont deze symptomen als een object in-process draait en memory- of andere resourceleaks heeft, je verneukt daarmee nl. de process-space van IE waarmee je 'm verhindert af te sluiten. Op zich zou de garbagecollector van Java dit niet mogen laten gebeuren overigens maar daar mag een Javahova zich over uitspreken, ik ben maar lullig C++ h4x0rtje :)

Professionele website nodig?


Verwijderd

Topicstarter
Het maakt niet uit welk runtime versie ik gebruik. Ik zal het proberen uit te leggen hoe het in grote lijnen gaat. Het connecten enzo gaat prima, daar zit het probleem niet.
De client krijgt een login scherm voor zijn neus. Hij vult zijn naam is en druk op login. Dan gebeurt er dit in de server:

- de naam wordt gecontroleerd of ie toegestaan is (geen namen als "kut" enzo)
- de naam wordt vastgelegd
- de info (zoals logintijd etc) wordt vastgelegd
- de client wordt toegevoegd aan de hashtable
- de server stuurt een code naar de client (de client weet nu dat de verbinding ok is en de layout van de chatbox wordt gemaakt)
- de server verstuurd de lijst met aanwezige chatters naar de client, en die worden toegevoegd in een lijst
- de server stuurt alle aanwezige kanalen naar de client, en die worden ook toegevoegd in een lijst
- de server stuurt een bericht naar iedereen dat chatter X het kanaal binnenkomt

Waar gaat het nu fout?

Bij het verzenden van de kanalen naar de client:

de methode getChannels() wordt aangeroepen door de server en ziet er als volgt uit:

Java:
1
2
3
4
5
6
7
public void getChannels()
{
    for(int i=0; i < channels.size(); i++)
    {
         sendToClient("29" + (String)channels.elementAt(i));
    }
}


De client krijgt dit:
29Kanaal1
29Kanaal2
etc
Hij voegt elke KanaalX toe aan de lijst (zonder getal 29)
Nummer 29 wordt gebruikt voor een switch statement in de client. Elk commando zijn eigen nummer.

  • Marcj
  • Registratie: November 2000
  • Laatst online: 09:50
Vang je toevallig ook excepties af zonder ze te printen? Daardoor kan best een Thread zijn vastgelopen door een exceptie zonder dat je het weet...

Verwijderd

Topicstarter
Marcj schreef op 10 March 2003 @ 12:03:
Vang je toevallig ook excepties af zonder ze te printen? Daardoor kan best een Thread zijn vastgelopen door een exceptie zonder dat je het weet...
Niet alle excepties worden geprint. Sommige worden naar de ChatArea geprint, maar een System.out.println heb ik niets aan. Dat verschijnt nergens? Een java console in een browser werkt niet? Althans geen idee waar dat ding zich verstopt.
Maar zelfs een lege catch mag toch geen crash veroorzaken?

Verwijderd

Topicstarter
Glimi schreef op 10 March 2003 @ 11:54:
Doet de boel het wel in de appletviewer op beide platformen? Probeer eens met de debugger door de code te lopen en kijk waar de boel blijft hangen :)
Met een appletviewer gaat het soms ook fout. Het gebeurt dus ook niet elke keer, dat is het vage :(
Maar in me console van me applet viewer kan ik niets zien...die crasht ook, je kunt er dan niets meer mee...

  • Marcj
  • Registratie: November 2000
  • Laatst online: 09:50
Verwijderd schreef op 10 maart 2003 @ 12:05:
[...]

Niet alle excepties worden geprint. Sommige worden naar de ChatArea geprint, maar een System.out.println heb ik niets aan. Dat verschijnt nergens? Een java console in een browser werkt niet? Althans geen idee waar dat ding zich verstopt.
Maar zelfs een lege catch mag toch geen crash veroorzaken?
Laat alle excepties op één of andere manier zien. Vooral als je moet debuggen. En met appletviewer moet je gewoon een applet kunnen starten zonder je browser en met je console.
Anders komt er (als je J2SDK geïnstalleerd hebt) ook onderin een icoontje in je taakbalk te staan. Die werkt dan als console.

Verwijderd

klinkt eerder als je netwerk protocollen die onder 2k en xp de boel dicht houden, en niet als een java probleem...

Verwijderd

Topicstarter
Marcj schreef op 10 maart 2003 @ 12:16:
[...]

Laat alle excepties op één of andere manier zien. Vooral als je moet debuggen. En met appletviewer moet je gewoon een applet kunnen starten zonder je browser en met je console.
Anders komt er (als je J2SDK geïnstalleerd hebt) ook onderin een icoontje in je taakbalk te staan. Die werkt dan als console.
Ik weet wel hoe een appletviewer werkt :) daar is geen browser voor nodig, maar dat bedoelde ik ook niet. Je kunt in internet explorer bij advanced van Internet Options aangeven: Java console enabled
Maar ik zie dan nergens dat console...

  • Marcj
  • Registratie: November 2000
  • Laatst online: 09:50
Verwijderd schreef op 10 March 2003 @ 12:43:
[...]


Ik weet wel hoe een appletviewer werkt :) daar is geen browser voor nodig, maar dat bedoelde ik ook niet. Je kunt in internet explorer bij advanced van Internet Options aangeven: Java console enabled
Maar ik zie dan nergens dat console...
Heb je al de nieuwste J2SDK geïnstalleerd? Doe dat maar eens, dan krijg je gewoon een soort van console als icoon in je taakbalk (naast je klok ;))

Verwijderd

Topicstarter
Verwijderd schreef op 10 March 2003 @ 12:41:
klinkt eerder als je netwerk protocollen die onder 2k en xp de boel dicht houden, en niet als een java probleem...
Hoe bedoel je dat? Als het inloggen wel goed gaat, dan kun je op de chat nog aangeven via een Choice of je alleen de chatters op het kanaal wilt zien, of dat je alle chatters wilt zien. Soms gaat het daar ook fout. DAn hangt ie ook als je 1 kiest. De manier werkt net als met kanalen doorsturen. Heb het al geprobeerd door de kanalen en lijst met chatters naar de ChatArea te sturen ipv in de lijst zelf. Dan gaat alles prima. Ik snap echt niet wat er loos kan zijn..en ook neit waarom het soms wel en soms niet goed gaat.
Ik zal wel eens kijken hoe ik moet debuggen met JCreator...nooit eerder gedaan namelijk

Verwijderd

Topicstarter
Marcj schreef op 10 maart 2003 @ 12:46:
[...]

Heb je al de nieuwste J2SDK geïnstalleerd? Doe dat maar eens, dan krijg je gewoon een soort van console als icoon in je taakbalk (naast je klok ;))
Die JRE 1.4 plugin is dat zeker? Ik zal wel eens kijken, heb een hekel aan die plugin, die gaat fonts veranderen enzo...

  • Marcj
  • Registratie: November 2000
  • Laatst online: 09:50
Verwijderd schreef op 10 maart 2003 @ 12:48:
[...]


Die JRE 1.4 plugin is dat zeker? Ik zal wel eens kijken, heb een hekel aan die plugin, die gaat fonts veranderen enzo...
:? Nee niet echt.
Deze: http://java.sun.com/j2se/1.4.1/download.html
Is een java-compiler, JVM etc... Is iig stukken beter dan de standaard JVM van microsoft.

Verwijderd

Topicstarter
hehe ik heb zelf JDK 1.1.8, 1.3.1 en 1.4.1 en ook alle JRE's...ik zal thuis wel eens kijken dan vanavond.
En ja...het uiterlijk met die 1.4 plugin is beetje anders dan met JVM

  • Marcj
  • Registratie: November 2000
  • Laatst online: 09:50
Verwijderd schreef op 10 maart 2003 @ 12:51:
hehe ik heb zelf JDK 1.1.8, 1.3.1 en 1.4.1 en ook alle JRE's...ik zal thuis wel eens kijken dan vanavond.
En ja...het uiterlijk met die 1.4 plugin is beetje anders dan met JVM
Met de JRE krijg je volgens mij niet die console, wel met de SDK.

Verwijderd

Topicstarter
Ik zal er wel weer naar kijken :) thnx voor alle info hier

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Debuggen zonder error gaat iig niet zo makkelijk ;)

In principe mag het geen memory probleem zijn (ik reken mezelf even onder de javahova's ;) ) En zoals je zelf al aangeeft zal het wel een Thread probleem zijn, of natuurlijk blocking IO.

Hoe lees je het netwerkverkeer uit? doe je een readln() en zo ja stuur je dan wel een \n mee.

etc etc.

kortom: erg veel kan ik er niet van zeggen zonder (meer) code of een stackTrace.


p.s. ik vind het waarschijnlijker dat de fout bij de programmeur ligt en niet bij de JVM ;)

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

wasigh schreef op 10 March 2003 @ 13:06:
In principe mag het geen memory probleem zijn (ik reken mezelf even onder de javahova's ;) )
offtopic:
Ik wist wel dat jij dit topic zou vinden als ik die term zou gebruiken ;)

Professionele website nodig?


Verwijderd

Topicstarter
wasigh schreef op 10 March 2003 @ 13:06:
Hoe lees je het netwerkverkeer uit? doe je een readln() en zo ja stuur je dan wel een \n mee.
Voor de input:
Java:
1
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));

Voor de output:
Java:
1
PrintWriter output = new printWriter(socket.getOutputStream());

Verzenden van data:
Java:
1
2
output.println(data_als_String);
output.flush();

en voor inlezen van text van server in client:
Java:
1
String text = input.readLine();

[ Voor 9% gewijzigd door Verwijderd op 10-03-2003 13:26 ]


Verwijderd

Topicstarter
Het verzenden van een message naar alle clients gaat nu zonder "synchronized", maar heb er nooit problemen van ondervonden. Maar kan het crashen van de CLIENT een gevolg zijn van een niet-synchronized methode in de SERVER?

Nu:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public void sendToAll(String message)
{
   //clients is een Hashtable voor de clients
   for(Enumeration e = clients.elements(); e.hasMoreElements();)
   {
         Client client = (Client)e.nextElement();
         client.sendToClient(message);
   }
}

//methode in andere class
public void sendToClient(String s)
{
     //outputStream is een PrintWriter
     outputStream.println(s);
     outputStream.flush();
}


Maar dit is beter? En zo ja, waarom kan de Thread fucked up raken?
Java:
1
2
3
4
5
6
7
8
9
public synchronized void sendToAll(String message)
{
   //clients is een Hashtable voor de clients
   for(Enumeration e = clients.elements(); e.hasMoreElements();)
   {
         Client client = (Client)e.nextElement();
         client.sendToClient(message);
   }
}
Pagina: 1