Anzeige:
Ergebnis 1 bis 10 von 10

Thema: Server socket fehlerhaft

  1. #1
    Registrierter Benutzer
    Registriert seit
    28.06.2005
    Beiträge
    5

    Server socket fehlerhaft

    Hallo,
    Habe mir nen kleinen Serversocket gemacht, der bisher auch funktioniert hat. Jetzt wollte ich aber dass sich mehrere clients gleichzeitig einloggen können, darum habe ich für den Client nen extra Thread gemacht. Es wird also folgender Code aufgerufen: (tcpserver.java)


    Code:
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    
    
    public class tcpserver extends Thread{
    	
    public tcpserver() {
    
    	}
    	
    	
    	
    public	void run() {	
    
    
    		
    
    ServerSocket   sock = null;                              // original server socket
    
    Socket         clientSocket = null;                      // socket created by accept
    
    PrintWriter     pw   = null;                              // socket output stream
    
    BufferedReader  br   = null;                              // socket input stream
    
    
    
    
    
    try {
    
    
    	sock = new ServerSocket(5555);               // create socket and bind to port
          
    
         System.out.println("waiting for client to connect");
    
         
        while (true){
         	
          clientSocket = sock.accept();                               // wait for client to connect
    
         new ClientThread(clientSocket); 
    
    
           
        }
    
    sock.close();
         
        
         
         
    
    } catch (Throwable e) { 
    //  ^-------^ sowas ist absolut schlimm... 
    System.out.println("Error " + e.getMessage()); 
    e.printStackTrace(); 
    
    }
    }
    }

    und in einen extra Thread die ClientThread.java:

    Code:
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    
    class ClientThread extends Thread { 
    	  private Socket clientSocket; 
    
    	  public ClientThread(final Socket clientSocket) 
    	  { 
    	    this.clientSocket = clientSocket;
    	  } 
    
    	  public void run() 
    	  { 
    	 
    	  	
    	  	System.out.println("client has connected"); 
    
    
    	  	
    	    PrintWriter pw = new PrintWriter(clientSocket.getOutputStream(), true); 
    	    BufferedReader br   = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
    
    
            pw.println("Hallo"); 
            
    String g = br.readLine(); 
    
    
    if (g.equals("1")) { 
    pw.println("Du hast 1 gedrückt"); 
    } 
    
    if (g.equals("2")) { 
    pw.println("Du hast 2 gedrückt"); 
    }     
    	 
    
    
              
           pw.close();                                                 
    
          br.close();
    
         clientSocket.close();
         
         System.out.println("closed");
    
       sock.close();
    
    }
      }
    Ich kann es aber nicht compilieren, weil er in der tcpserver.java die Zeile mit "sock.close();" als Fehler anstreicht (unreachable code) und in der ClientThread nur das "sock" von "sock.close();" anstreicht (sock cannot be resolved). Weiß jemand vielleicht was ich an dem code falsch gemacht habe, bzw was man ändern muss dammit er so läuft wie er soll? wäre dankbar für alle tipps,
    gruß
    noreux

  2. #2
    Registrierter Benutzer Avatar von Boron
    Registriert seit
    07.01.2002
    Beiträge
    827
    sock.close() steht direkt nach einer Endlosschleife. Wie soll das Programm da jemals "hinter" die Schleife kommen?
    Gruß Boron (der sich oft wegen mieser Rechtschreibung anderer die Augen reiben muss)

    LINUX IS LIKE AN INDIAN TENT: NO GATES, NO WINDOWS AND AN APACHE INSIDE!
    Hardware Monitoring unter Linux -> http://santafu.sourceforge.net (Temperaturen, Lüfterdrehzahlen und Spannungen)

  3. #3
    Registrierter Benutzer
    Registriert seit
    28.06.2005
    Beiträge
    5
    stimmt, aber selbst wenn ich dieses socket.close() auskommentiere, meckert er noch wegen dem "sock" aus dem ClientThread rum....ne ahnung wie ich das lösen könnte?

  4. #4
    Registrierter Benutzer Avatar von Boron
    Registriert seit
    07.01.2002
    Beiträge
    827
    Die Einrückung in der ClientThread.java ruft in mir Brechreiz hervor.
    Darum kann ich nur raten, dass "sock" als Variable nicht bekannt ist. Zumindest sehe ich sie nirgendwo sonst inder Klasse ClientThread.
    Gruß Boron (der sich oft wegen mieser Rechtschreibung anderer die Augen reiben muss)

    LINUX IS LIKE AN INDIAN TENT: NO GATES, NO WINDOWS AND AN APACHE INSIDE!
    Hardware Monitoring unter Linux -> http://santafu.sourceforge.net (Temperaturen, Lüfterdrehzahlen und Spannungen)

  5. #5
    Registrierter Benutzer
    Registriert seit
    28.06.2005
    Beiträge
    5
    , sorry bin aber ziemlicher Neuling in Java. hmm könntest mir nicht vielleicht n tipp geben wie ich den code lauffähig bekäme? hab da (noch) zu wenig Ahnung von..

    es soll jetzt nicht wunderbar stabil und tolerant laufen, mir würds vorerst reichen wenns mal wenigstens halbwegs funktioniert...

  6. #6
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Wie Boron schon sagt gibt es in der Klasse ClientThread keine Variable sock.
    Also diese Zeile rausnehmen.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  7. #7
    Registrierter Benutzer
    Registriert seit
    28.06.2005
    Beiträge
    5
    danke, aber das habe ich natürlich auch schon probiert, sobald ich aber sock.close() auskommentiere, markiert er mir weiter oben clientSocket.getOutputStream() und clientSocket.getInputStream() als fehlerhaft (br.readline() und br.close() auch)...

  8. #8
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Wie schon gesagt: Das Zeugs schön einrücken, und genaue Fehlermeldung angeben - sonst kann (und will) dir hier wohl niemand helfen.

    MfG Bischi

    PS: Falls du von Java noch keine Ahnung hast ist dies definitiv das falsche Beispiel zum Einsteigen! Netzwerkverbindungen sind im allgemeinen eher heikel. Für den Java-Einstieg findest du viele Links auf meiner HP (siehe Sig)

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  9. #9
    Registrierter Benutzer
    Registriert seit
    28.06.2005
    Beiträge
    5
    ich weiß dass es relativ schwer für den Anfang ist, aber mit Netzverbindungen im Allgemeinen kenn ich mich schon aus, bin halt in Java noch nicht so weit, wobei es bisher eigentlich alles funktioniert, nur wenn ich den Server in einen Extra Thread packe gehts nicht mehr, und das wäre aber wichtig, dass mehrere Leute gleichzeitig auf den Server draufkommen...

    also mein Hauptthread sieht so aus:

    Code:
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    
    
    public class tcpserver extends Thread{
    	
    public tcpserver() {
                      	}
    	
    	
    	
    public	void run() {	
    
        int x=1;
        int serverPort=666;
    
    
    
    		
    
        ServerSocket   sock = null;                              
        Socket            clientSocket = null;                      
        PrintWriter       pw   = null;                             
        BufferedReader  br   = null;                             
    
    
        try {
    
    
    	  sock = new ServerSocket(serverPort);                    
              System.out.println("waiting for client to connect");
    
    
        
             while (x<10)
                              {
        	
        	                   clientSocket = sock.accept();              
    
                               new ClientThread(clientSocket); 
    
    
                               x=x+1;
         
                               }
    
        
            sock.close();
         
        
         
         
    
            } catch (Throwable e) { 
                                   System.out.println("Error " + e.getMessage()); 
                                   e.printStackTrace(); 
    
                                           }
            }
    }
    und so der Thread der aufgerufen wird (ClientThread.java)

    Code:
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    
    class ClientThread extends Thread { 
    	  private Socket clientSocket; 
    
    	  public ClientThread(final Socket clientSocket) 
    	  { 
    	    this.clientSocket = clientSocket;
    	  } 
    
    	  public void run() 
    	  
    	  { 
    	 
    
    	  	
    	  	
    	  System.out.println("client has connected"); 
    
    
    	  	
    	    PrintWriter pw = new PrintWriter(clientSocket.getOutputStream(), true); 
    	    BufferedReader br   = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
    
    
            pw.println("Hallo"); 
            
            String g = br.readLine(); 
    
    
            if (g.equals("1")) { 
                                pw.println("Du hast 1 gedrückt"); 
                                   } 
    
            if (g.equals("2")) { 
                                pw.println("Du hast 2 gedrückt"); 
                                   }     
    	 
    
    
              
            pw.close();                                                 
    
            br.close();
    
            clientSocket.close();
         
            System.out.println("closed");
    
    
            }
      }
    Nun gibt es aber Fehler beim compilen der ClientThread.java. Er markiert ClientSocket.getOutputStream() und clientSocket.getInputStream() als fehlerhaft (Unhandled Exception type IO Exception). br.readLine(); ist demnach auch fehlerhaft und weiter unten br.close(); und clientSocket.close(); ...

  10. #10
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Der Code ist schon ok.
    Der Compiler sagt dir nur, daß du vergessen hast, die Exceptions zu beachten, die die von dir benutzen Methoden werfen können.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

Lesezeichen

Berechtigungen

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