Avatar billede arnejan Nybegynder
21. november 2003 - 12:32 Der er 9 kommentarer og
1 løsning

outputStream kaster ingen Exception

Jeg kan ikke få min outputStream til at kaste Exception når jeg sender noget til en server.

Jeg bruger en filterOutputStream og write(byte[]) og flush().

Hvad skal jeg gøre for at fange en Exception hvis serveren er nede, eller forbindelsen væk.

Mvh
Avatar billede dsj Nybegynder
21. november 2003 - 13:03 #1
Du finder ud af det gennem læsning, ikke gennem skrivning:

while(true) {
  StringBuffer sb = new StringBuffer();
  int c = -1;
  while (c != 0 && c != 10 && noStopRequested) {
    c = in.read();
    if (c == -1)
      throw new IOException("Server down.");
    if (c != 0 && c != 10)
      sb.append((char)c);
  }
  String receivedData = sb.toString();
} catch(Exception e) {
  e.printStackTrace();
  // serveren er sandsynligvis gået ned
}
Avatar billede arne_v Ekspert
21. november 2003 - 13:21 #2
Jeg ville forvente en IOException. Fordi den får jo ikke nogen TCP
layer bekræftigelse på pakken.
Avatar billede dsj Nybegynder
21. november 2003 - 13:49 #3
in.read() vil som arne_v siger kaste en IOException, hvis det opdages, at forbindelsen er afbrudt.
Avatar billede arnejan Nybegynder
21. november 2003 - 17:03 #4
Hmm, jeg tror det må kunne gøres på en eller anden anden måde.

Problemet må være at write() retunerer med det samme, og selve afsendelsen sker senere i en anden tråd. Mon ikke man kan gribe et event når write er helt overstået og teste det der, altså noget asymkromt hvis der er noget som hedder det på 'java' .

Mvh
Avatar billede dsj Nybegynder
21. november 2003 - 17:08 #5
Du kan på ingen måde være sikker på at forbindelsen er ok, selvom du kan sende. Dermed kan du heller ikke være sikker på at du vil modtage en exception, hvis forbindelsen er afbrudt. Det er altid læsninger fra en stream, der vil medføre fejl, hvis forbindelsen er afbrudt. Enten i form af en smidt IOException, eller hvis du modtager bytes med værdien -1.
Avatar billede arnejan Nybegynder
21. november 2003 - 17:45 #6
Det an jeg ikke tro på er rigtigt..... Jeg tror godt at man på en eller anden måde kan sende, og så få en besked når afsendelsen er overstået og om det gik godt eller dårligt. Det må man kunne, ellers er der sku da noget galt med Java,
Avatar billede dsj Nybegynder
21. november 2003 - 17:50 #7
Du kan kun være sikker på at du får en bekræftelse på afsendelsen, hvis den server du sender beskeden til svarer tilbage. Det jeg siger er ikke, at du aldrig vil opdage at forbindelsen er afbrudt når du sender, men oftest kan du ikke være sikker på det. Grunden er ikke Java, men den underliggende TCP-service, der endnu ikke har opdaget at forbindelsen er afbrudt.
Avatar billede arnejan Nybegynder
21. november 2003 - 17:53 #8
Man får kan få et callback i c#, så det skyldes ikke TCP. Jeg vender tilbage.
Avatar billede arne_v Ekspert
21. november 2003 - 19:46 #9
Jeg mener at send vil time ud og give en exception når TCP/IP stakken
opgiver at retransmitere fordi den ingen bekræftigelse får.
Avatar billede arnejan Nybegynder
28. november 2003 - 00:21 #10
Det virker rigtigt som du skriver dsj, nu kaster read en exception når jeg sender til er server der er væk.

Synes bare det er noget rod, det kan jo være lidt svært at styre hvilken data klienten så ikke har fået sendt til serveren. Det ville være meget lettere hvis der blev kastet en exception af write, ligesom c# gør.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Banedanmark

License Manager

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Senior Platform Engineer

Operate Technology A/S

PHP-udvikler til Drupal