Announcement

Collapse
No announcement yet.

Socket - Daten vom Server empfangen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Socket - Daten vom Server empfangen

    hi!

    ich habe einen thread gemacht, dass server-messages abfangen soll:
    Code:
    	public void run() {
    		BufferedReader reader;
    		
    		try {
    			reader = new BufferedReader(
    					new InputStreamReader(socket.getInputStream()));
    
    			String outline;	
    			while(!super.isStop()){
    				if((outline = reader.readLine()) != null){	
    					System.out.println(outline);
    				}
    			reader.close();
    			}
    			socket.close();
    		} catch (IOException e) {
    			System.out.println("IO Exception occured:" + e.getMessage());
    		}
    
    	}
    bei dieser zeile bleibt mein programm jedoch "hängen"
    if((outline = reader.readLine()) != null){

    sobald ich reader.readLine() aufrufe geht nichts mehr.
    kann mir jemand sagen woran das liegen könnte?

    es wird übrigens keine exception geworfen. wenn ich das programm in eclipse
    debugge ist ab dieser zeile nichts mehr sichtbar. also das programm läuft weiter
    aber die zielenmarkierung ist weg.
    Zuletzt editiert von mlux82; 06.10.2009, 19:19.

  • #2
    Vermutlich liefert der Server kein Zeilenende
    Christian

    Comment


    • #3
      Originally posted by Christian Marquardt View Post
      Vermutlich liefert der Server kein Zeilenende
      danke für die antwort - hilft leider auch nicht

      ich habe das ganze if-konstrukt auskommentiert und durch
      Code:
      System.out.println(reader.read());
      ersetzt. wieder das gleiche. es passiert nichts...

      Comment


      • #4
        Dann wird der Server gar nichts liefern.
        Christian

        Comment


        • #5
          Originally posted by Christian Marquardt View Post
          Dann wird der Server gar nichts liefern.
          dann müsste er zumindest aus dem if rausgehn denn ich frage ja immer den fall ab, dass nichts kommt:
          Code:
          if((outline = reader.readLine()) != null){
          oder
          Code:
          if(reader.read() != 0){
          					System.out.println(reader.read());	
          				}

          Comment


          • #6
            ??? Wenn gar nichts kommt, kommt auch keine 0 oder null.

            Wenn der Connect hergestellt ist und der Server nix liefert wird bis zum timeout gewartet.

            Wenn also der Connect zum Server klappt, dort der richtige Host und Port vorgegeben wurden, kann es fast nur am Server liegen
            Christian

            Comment


            • #7
              Originally posted by Christian Marquardt View Post
              ??? Wenn gar nichts kommt, kommt auch keine 0 oder null.

              Wenn der Connect hergestellt ist und der Server nix liefert wird bis zum timeout gewartet.

              Wenn also der Connect zum Server klappt, dort der richtige Host und Port vorgegeben wurden, kann es fast nur am Server liegen
              wie kann ich das timeout am client einstellen?

              was ich noch nicht verstehe - auch wenn er bis zum timeout wartet - das ist ja ein thread den ich dort aufgemacht habe. deshalt muss ja das restliche programm weiterlaufen - was es aber leider nicht tut.... da muss es schon noch an was anderem liegen.?!
              Zuletzt editiert von mlux82; 06.10.2009, 20:35.

              Comment


              • #8
                Nun, kann nicht hellsehen, weiss nicht wie du den Thread erstellst...

                Wenn du nach dem Starten des Thread wartest, läuft das Hauptprogramm nicht weiter

                http://java.sun.com/j2se/1.4.2/docs/...tSoTimeout(int)

                http://www.dpunkt.de/java/Programmie...reading/3.html
                Christian

                Comment


                • #9
                  Originally posted by Christian Marquardt View Post
                  Nun, kann nicht hellsehen, weiss nicht wie du den Thread erstellst...

                  Wenn du nach dem Starten des Thread wartest, läuft das Hauptprogramm nicht weiter

                  http://java.sun.com/j2se/1.4.2/docs/...tSoTimeout(int)

                  http://www.dpunkt.de/java/Programmie...reading/3.html
                  danke für die antwort. das wusste ich nicht mit den threads
                  edit:
                  die threads werden gleichzeitig ausgeführt. hatte sie falsch gestartet mit .run statt .start
                  jedoch ist das problem mit der fehlenden antwort noch immer nicht gelöst...

                  wie ist das eigentlich mit den sockets? kann man da gleichzeitig mehrere offen halten? zb. mit socket 1. schreibe ich etwas an server und mit socket 2 erhalte ich von dem geschriebenen eine antwort.
                  oder muss das schreiben und lesen von einem socket aus gehen?
                  Zuletzt editiert von mlux82; 06.10.2009, 23:59.

                  Comment


                  • #10
                    Du kannst die gleiche instanz des socket nutzen
                    Christian

                    Comment


                    • #11
                      Originally posted by Christian Marquardt View Post
                      Du kannst die gleiche instanz des socket nutzen

                      mich interessiert genau der umgekehrte fall.
                      wenn ich zwei sockest aufmache. einen nur zum senden
                      und einen extra socket in einem thread nur zum empfangen.

                      wenn ich dann was an den server sende, wird dann die zugehörige antwort im empfang-socket geliefert oder bezieht sich so ein anfrage-antwort szenario immer nur auf einen verbindung - sprich socket?

                      Comment


                      • #12
                        Das wird nicht gehen; woher soll der Server wissen, an welchen er senden soll? Beide haben die gleiche IP. Des Weiteren kannst du nur ein Socket an eine Verbindung knüpfen. Machst du einen zweiten auf, wird dieser sich nicht verbinden, da der prot schon belegt ist. Du kannst 2 Sockets verwenden, wenn du verschiedene Ports nutzt
                        Christian

                        Comment


                        • #13
                          Problem gelöst!

                          Originally posted by Christian Marquardt View Post
                          Das wird nicht gehen; woher soll der Server wissen, an welchen er senden soll? Beide haben die gleiche IP. Des Weiteren kannst du nur ein Socket an eine Verbindung knüpfen. Machst du einen zweiten auf, wird dieser sich nicht verbinden, da der prot schon belegt ist. Du kannst 2 Sockets verwenden, wenn du verschiedene Ports nutzt

                          ok danke! ich übergebe jetzt dem thread beim konstruktor den socket somit nutze ich ihn bei eingaben am client und bei ausgaben vom server am thrad.

                          das problem ist nun endlich gelöst - und zwar habe ich anscheinend nie etwas an den server gesendet.
                          haber den writer geändert auf einen PrintWriter und mit writer.println() funkt nun das senden an den server..

                          danke nochmals für die antworten und die mühen!

                          Comment

                          Working...
                          X