tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Kai008
ERLEDIGT
JA
ANTWORTEN
6
ZUGRIFFE
681
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von starbuck86
    starbuck86 starbuck86 ist offline Mitglied Silber
    Registriert seit
    Sep 2008
    Beiträge
    54
    Hallo Comm.

    Ich habe für mein Projekt eine Klasse erstellt, in der ein Socket-Server läuft, welcher dynamisch Connections annimmt und OutputStream und InputStream-Objekte zuweist. Diese Klasse ist als Thread über eine Hauptklasse gestartet.
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    
    public class SServer implements Runnable {
        
        private static Socket[] client = new Socket[10];
        private static OutputStream[] out = new OutputStream[10];
        private static InputStream[] in = new InputStream[10];
     
        public void handleConnection(int count) throws IOException {
            in[count] = client[count].getInputStream();
            out[count] = client[count].getOutputStream();
            out[count].write(1);
        }
        
        public OutputStream getOutputStream (int z){
            return out[z];
        }
        public Socket getSocket (int z){
            return client[z];
        }
     
        ServerSocket server1 = null;
        Socket client_default = null;
     
        public void run()
        {       
            try { //Socket-Server starten
                server1 = new ServerSocket(14002);
                while (true) {  
                    try { //Clients annehmen
                        client_default = server1.accept();
                        if (client_default != null){
                            for (int i=0; i < client.length; i++) {
                                if (client[i] == null) {
                                    client[i] = client_default;
                                    handleConnection(i);
                                    break;
                                }
                            }   
                            client_default = null;
                        }
                    } catch (IOException e) {
                        e.printStackTrace();}
                } //Endlosschleife zum Annehmen der neuen Connections
            } catch (IOException ioe) {
                ioe.printStackTrace();}     
        }
    }

    Dazu gibt es eine zweite Klasse, die ebenfalls als Thread gestartet wird. Diese Klasse sendet in einer Endlosschleife der vorhandene Connections über das out Objekt die Zahl 7.
    Jedenfalls in der Theorie.

    In der Praxis sieht es allerdings etwas anders aus.
    Sobald ich über out.write(7); (2.Quellcode, Zeile 8) etwas schreiben will bekomme ich eine NullPointerException.

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    public class SServer_send extends SServer implements Runnable {
        public void run() {
            try {
                while (true) {
                    for (int j=0; j<=9; j++) {
                        if (getSocket(j) != null) {
                            System.out.println(getSocket(j)+"\n");
                            getOutputStream(j).write(7);
                            //closeConnection(j);
                        }
                    }
                }
            } catch (IOException x) {
                x.printStackTrace();
            }
        }
    }

    Kann mir einer sagen, warum ich diese Meldung bekomme?
    Ich lass mir doch das OutputStream-Objekt out zurückgeben mit der selbst definierten Methode getOutputStream() - dachte ich zumindest.

    Gruß && Danke
    Thomas
    Geändert von starbuck86 (14.10.08 um 13:49 Uhr)
     

  2. #2
    Kai008 Kai008 ist offline Mitglied Brillant
    Registriert seit
    May 2008
    Ort
    Brunn/Geb. (Niederösterreich)
    Beiträge
    944
    Blog-Einträge
    1
    Der warscheinlichste Grund wäre wohl, dass der 2. Source auf ein Feld des Arrays zugreifen will, wo noch nichts "gescheites" drinnensteht.
    Ändere mal:

    Code java:
    1
    2
    3
    4
    5
    
    public OutputStream getOutputStream (int z)
    {
        System.out.println(z + " - " + out[z]);
        return out[z];
    }

    Wenn er dir wärend dem Test "null" ausgibt hast du einen Fehler.
     

  3. #3
    Avatar von joschi70
    joschi70 joschi70 ist offline Mitglied Gold
    Registriert seit
    Sep 2008
    Beiträge
    143
    Hi,

    wo werden denn Deine Sockets initialisiert?

    Gruß
    joschi
     

  4. #4
    Avatar von starbuck86
    starbuck86 starbuck86 ist offline Mitglied Silber
    Registriert seit
    Sep 2008
    Beiträge
    54
    Der hatte noch einen NULL-Wert.
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    if (getSocket(j) != null) {
        while (getOutputStream(j) == null) {
            try { Thread.sleep(500); } 
            catch(InterruptedException e) { e.printStackTrace(); }
        }
        System.out.println(getSocket(j)+"\n");
        getOutputStream(j).write(7);
        //closeConnection(j);
        }
    Jetzt klappts, hatte wohl etwas gedauert bis er den OutputStream hinzugefügt hat.

    Danke - seh manchmal den Wald vor lauter Bäumen nicht mehr.

    //Edit: Könnt ihr mir vielleicht sagen, wie ich mehr als nur 1 Byte übertragen muss? Vielleicht mit nem kleinen Codebeispiel?
     

  5. #5
    MichaelW MichaelW ist offline Mitglied
    Registriert seit
    Mar 2004
    Beiträge
    20
    Du kannst ganz einfach auch zeichenorientierte Streams verwenden. z.B. PrintWriter um zu schreiben/senden und BufferedReader um zu lesen/empfangen. Stichwort hier heisst "Streamverkettung"... findest du sicherlich einiges im Netz dazu...
     

  6. #6
    Kai008 Kai008 ist offline Mitglied Brillant
    Registriert seit
    May 2008
    Ort
    Brunn/Geb. (Niederösterreich)
    Beiträge
    944
    Blog-Einträge
    1
    Hier 2 Methoden, die ich auch immer verwende:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    
    public String receive(java.net.Socket server, int bufferlength)
    {
        try
        {
            if(bufferlength == 0)
                bufferlength = 1024;
            
            java.io.BufferedReader bufferedReader =
                new java.io.BufferedReader(
                        new java.io.InputStreamReader(server.getInputStream()));
     
            char[] buffer = new char[bufferlength];
     
            int anzahlZeichen = 0;
            anzahlZeichen = bufferedReader.read(buffer, 0, 200);
     
            String nachricht = new String(buffer, 0, anzahlZeichen);
            return(nachricht);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        return(null);
    }
    public void send(java.net.Socket server, String string)
    {
        try
        {
            java.io.PrintWriter printWriter =
                new java.io.PrintWriter(
                    new java.io.OutputStreamWriter(
                            server.getOutputStream()));
            printWriter.print(string);
            printWriter.flush();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    starbuck86 bedankt sich. 

  7. #7
    Avatar von starbuck86
    starbuck86 starbuck86 ist offline Mitglied Silber
    Registriert seit
    Sep 2008
    Beiträge
    54
    ........... Danke
    Geändert von starbuck86 (15.10.08 um 11:31 Uhr)
     

Ähnliche Themen

  1. java-lang.NullPointerException die 2te
    Von MopsdeBops im Forum Java
    Antworten: 28
    Letzter Beitrag: 17.12.08, 08:52
  2. java.lang.NullPointerException
    Von fenerli23 im Forum Java
    Antworten: 7
    Letzter Beitrag: 25.01.08, 13:53
  3. java.lang.NullPointerException
    Von acronym im Forum Java
    Antworten: 11
    Letzter Beitrag: 14.08.07, 08:12
  4. java.lang.NullPointerException ?
    Von bernds im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 3
    Letzter Beitrag: 08.06.06, 09:09
  5. java.lang.NullPointerException
    Von Gee im Forum Java
    Antworten: 3
    Letzter Beitrag: 05.04.04, 12:03