Toon posts:

[Java] Verbinding met server probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb momenteel een java chatbox...draait allemaal prima op een minpuntje na. Zodra de client wil chatten krijgt hij een loginscherm te zien. Hij vult zijn nickname in en drukt op een login button. Maar als de server offline is dan blijft de client hangen bij het inloggen...logisch, want er is geen verbinding tot stand gekomen met de server. Maar de client denkt dan: hmm vage chat dit..het werkt niet eens. Wat ik dus wil is eerst een check of de client kan verbinden met de server en als die verbinding er is, dat dan het loginscherm pas komt. Maar als het 30 seconden moet duren voordat het loginscherm komt...dan is te veel te lang (die 30 seconden is ongeveer de tijd voordat er een exception optreedt dat ie geen verbinding kan maken met de server)

Dus ik wil zoiets als:
Java:
1
2
3
4
5
6
7
8
9
10
try
{
    Socket socket = new Socket("de_url", poortnummer);
    //input en outputstreams maken
    //alles gaat goed, dus loginscherm moet komen
}
catch(IOException e)
{
     //laat een message verschijnen waarin staat dat de server down is
}

Op deze manier zal de client ±30 sec "hangen" bij het inloggen alvorens de Exception gegooid wordt....hoe kan dit anders (cq. sneller)?

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 19:33

Robtimus

me Robtimus no like you

Socket.setSoTimeout(int timeout) ?
Enable/disable SO_TIMEOUT with the specified timeout, in milliseconds. With this option set to a non-zero timeout, a read() call on the InputStream associated with this Socket will block for only this amount of time. If the timeout expires, a java.net.SocketTimeoutException is raised, though the Socket is still valid. The option must be enabled prior to entering the blocking operation to have effect. The timeout must be > 0. A timeout of zero is interpreted as an infinite timeout.
Probeer die eens?

[ Voor 3% gewijzigd door Robtimus op 18-07-2003 14:38 ]

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Verwijderd

Topicstarter
IceManX schreef op 18 juli 2003 @ 14:38:
With this option set to a non-zero timeout, a read() call on the InputStream associated with this Socket will block for only this amount of time.
[...]
Probeer die eens?
Als ik zeg socket.setSoTimeout(2500); dan kan mijn INPUTstream 2.5 sec niets lezen en dat is niet wat ik wil he....stel dat de server wel online is, dan wil ik graag zijn data lezen en niet een extra 2.5 sec daar op wachten...

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
ik geloof dat java.nio direct een error teruggeeft. Net zoals die ook heel mooi closed sockets teruggeeft (wat ik gek genoeg niet kon nadoen met de "oude" sockets). NIO is in feite gewoon de socket van je OS zelfs de errors messages die je krijgt. VEEL beter dan Thread/Socket approach.

  • nxt
  • Registratie: November 2001
  • Laatst online: 12-06 10:00

nxt

Verwijderd schreef op 18 July 2003 @ 14:46:Als ik zeg socket.setSoTimeout(2500); dan kan mijn INPUTstream 2.5 sec niets lezen en dat is niet wat ik wil he....stel dat de server wel online is, dan wil ik graag zijn data lezen en niet een extra 2.5 sec daar op wachten...
als je zegt socket.setSoTimeout(2500); dan kan voor zover ik weet je inputstream wel degelijk meteen lezen,
alleen als ie niet binnen 2.5 seconden iets kan lezen gooit ie die exception.
('t is een timeout geen delay)

maar wat je zoekt is een timeout bij 't maken van de verbinding
als je 1.4+ gebruikt kun je een socket maken met de parameterloze constructor
zodat ie niet meteen connect
en dan de juiste connect method aanroepen
connect(SocketAddress endpoint, int timeout)

Verwijderd

Topicstarter
De client is een 1.1.8 versie, omdat men dan never nooit niet een plugin hoeft te downloaden en deze versie van java heeft iedereen wel :)
Maar goed, ik ben er inmiddels uit :) Vond iets de site van sun..indien men geinteresseerd is:

http://developer.java.sun...gParade/bugs/4110694.html

Dan kun je gewoon een timeout aangeven en dan werkt het ook zoals ik wou :Y)
Pagina: 1