Anzeige:
Ergebnis 1 bis 5 von 5

Thema: Read auf Socket blockiert programm???????????

  1. #1
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    377

    Read auf Socket blockiert programm???????????

    Ich sitz schon seit einiger Zeit an ner App und was mir nocht wirklich dazu fehlt ist das Handling zur Netzwerkschnitstelle.
    Das baue ich gerade ein und bin da auf ein Problem gestossen!
    Und zwar erzeuge ich mit
    Code:
    this.socket = new Socket( this.hostOrAddress, this.port );
    die Verbindung zum Server, mit dem ich mich verbinden muss.
    Dann erzeuge ich mit
    Code:
    this.writer = new PrintStream( this.socket.getOutputStream() );
    InputStreamReader streamReader = new InputStreamReader( this.socket.getInputStream() );
    BufferedReader reader = new BufferedReader( streamReader );
    die Streams zum lesen und schreiben und fange dann in einem Thread sofort an zu lesen.
    Code:
    while ( true ) {
    if ( ( line = buffer.readLine() ) != null ) {
    ....
    }
    }
    und an der Stelle blockiert ploetzlich mein programm
    Er faengt auch an zu lesen, liest die ersten zeilen ein die versendet werden wenn man eine Verbindung zum Server aufbaut (aus dem was er erhaelt macht er bis noch nichts, der Code ist zwar vorhanden, aber das was er empfaengt wird nicht als gueltige nachricht fuer mein Programm ausgewertet und deshalt verschmissen).
    Das lesen laeuft wie schon gesag in einem Thread ab, deshalb versteh ich nicht genau wieso er blockiert.
    Sofort nach dem starten des Threads sollte eine weitere Methode eine Nachricht an den Server schicken, aber diese wird nicht mal aufgerufen ....

    Fuer mich ist das ganze ein ziemliches raetsel warum das ganze blockiert! Hat jemand vielleicht eine Idee woran das noch liegen koennte?

    lg
    nul
    Amilo D - 2,8 Ghz - ATI Radeon 9000
    Debian GNU/Linux 3.1 (Sarge)

  2. #2
    Registrierter Benutzer
    Registriert seit
    07.08.2006
    Beiträge
    101
    Was da blockiert ist das Lesen... Das Problem könnte schon gelöst sein, indem du deine Schleife so (um-)schreibst:
    Code:
    while ((line = buffer.readLine()) != null) {
      ...
    }

  3. #3
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    377
    Leider loest das das Problem auch nicht.
    Meiner Meinung nach muesste das ja eigentlich die while-Schlefe abbrechen, wenn nichts mehr zu lesen ist ... aber genau das passiert auch nicht?
    Mal ne Frage, readLine() blockiert doch nicht, oder? In der API hab ich dazu beim ueberfliegen leider nichts gefunden!
    Amilo D - 2,8 Ghz - ATI Radeon 9000
    Debian GNU/Linux 3.1 (Sarge)

  4. #4
    Registrierter Benutzer
    Registriert seit
    07.08.2006
    Beiträge
    101
    Wenn mein Änderungsvorschlag das Problem nicht löst (in deiner Variant hätte die Schleife nie terminiert, da true irgendwie immer true ist ), dann solltest du serverseitig mal schauen, ob da irgendwann aufgehört wird in den OutputStream zu schreiben. Weil: read()-Methoden von InputStreams blockieren tatsächlich...
    This method blocks until input data is available, the end of the stream is detected, or an exception is thrown.
    (zitiert von -> hier <-)

  5. #5
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    377
    ok, nach einer laengeren Pair-Programming sitzung mit dem Entwickler des Servers haben wir dann doch noch einige Fehler entdeckt.
    Zwar nicht unbedingt Fehler die mit dem hier zu tun haben, aber wer weiss.

    lg
    nul
    Amilo D - 2,8 Ghz - ATI Radeon 9000
    Debian GNU/Linux 3.1 (Sarge)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •