Avatar billede roo104 Nybegynder
26. november 2003 - 19:43 Der er 1 løsning

Sende objekter mellem server og klient

Jeg forsøger at sende nogle objekter mellem klient og server og omvendt. Jeg kan godt sende 1 objekt til klient/server fra klient/server men anden gang jeg prøver får jeg en java.net.SocketException: Software caused connection abort: recv failed.
Eks 1.
1. Server sender et objekt til klienten, som går fint.
2. Server prøver at sende endnu et objekt, og fejlen opstår

Eks 2.
1. Klient sender objekt til server, går fint.
2. Server prøver at sende objekt til klient, og den fejler.

Jeg har prøvet mig lidt frem med flush(), men uden held.
Mine objekter jeg sender er serializable.

Poster også lige lidt kode fra klient og server

------- Server ------------
ServerSocket socket = new ServerSocket(2000);       
     
        System.out.println(new Date() + " : Server venter på forbindelser...");
             
        //Starter servicen som kører indtil brugeren sender 0 som kommando
        while (service) {
            //Opretter en socket til indkommende klienter
            Socket s = socket.accept();
            System.out.println(new Date() + " : Klient "+s.getRemoteSocketAddress()+" har oprettet forbindelse til databasen");
                                 
            //Opretter output stream som sender til klienten
            OutputStream out = s.getOutputStream();
            //PrintStream til at sende en tekst til brugeren
            PrintStream skrivOut = new PrintStream(out);
            //ObjectOutputStream til at sende et objekt til brugeren
            ObjectOutputStream objOut = new ObjectOutputStream(out);
           
            //Opretter input som læster fra klienten
            InputStream in = s.getInputStream();
            ObjectInputStream objIn = new ObjectInputStream(in);
           
            //Læser en byte
            byte valg = (byte)in.read();         
           
            switch (valg) {
                //Opretter en studerende
                case 1:
                    Studerende stu = (Studerende)objIn.readObject();
                    System.out.println(stu.getNavn());
                    map.addStuderende(stu);
                                     
                    //Skriver mappet ud på disken med den nye studerende
                    DatabaseMap.saveMap(map);
                   
                    //Skriver en besked tilbage til brugeren
                    //skrivOut.print("Den studerende blev succecfult oprettet");
                    //skrivOut.flush();
                    System.out.println(new Date() + " : Klient "+s.getRemoteSocketAddress()+" har oprettet en studerende i databasen");
                    break;




--------- Klient ----------
Socket socket = new Socket("localhost",2000);
               
            //---------- Til output ----------//
            //Oprettet en OutputStream til serveren
            OutputStream out = socket.getOutputStream();
            //ObjectOutputStream til at sende et objekt til serveren
            ObjectOutputStream objOut = new ObjectOutputStream(out);
           
            //---------- Til indput ----------//
            //Oprettet en InputStream til serveren
            InputStream in = socket.getInputStream();
            //Kan modtage et object fra serveren
            ObjectInputStream objIn = new ObjectInputStream(in);
            //Kan modtage en byte strøm
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
         
            //Til indlæsning af input fra keyboard
            InputStreamReader reader = new InputStreamReader(System.in);
            BufferedReader console = new BufferedReader(reader);
           
           
            while (!done) {                   
                System.out.println("---------------------------------");
                System.out.println("Tast 1 for at oprette en studerende");
                System.out.println("Tast 2 for at slette en studerende");
                System.out.println("Tast 3 for at ændre en studerendes oplysninger");
                System.out.println("Tast 4 for at hente en studernde ud fra tlf nr");
                System.out.println("Tast 5 for at hente alle studerende");
                System.out.println("Tast 9 for at afslutte programmet");
                System.out.println("Tast 0 for at lukke serveren");
                System.out.println("---------------------------------");
                menu = Integer.parseInt(console.readLine());

                switch (menu) {
                    case 0:
                        out.write(0);
                        out.flush();
                        System.out.println("Serveren bliver nu lukket");
                        break;

                    case 1:
                        out.write(1);                                           
                        objOut.writeObject(new Studerende(new Integer(52345678),"Ole","Her bor han"));
                       
                        out.flush();
                        objOut.flush();
                       
                        System.out.println("Den studerende er nu oprettet");
                        break;

                    case 2:
                        out.write(5);
                        break;

                    case 3:
                        out.write(5);
                        break;
                       
                    case 4:
                        out.write(5);
                        break;

                    case 5:
                        out.write(5);                     
                       
                        Object[][] data = (Object[][])objIn.readObject();

                        for (int t = 0 ; t < data.length ; t++) {
                            for (int i = 0 ; i < 3 ; i++) {
                                System.out.print(data[t][i]+" ");
                            }
                            System.out.println();
                        }
                       
                        out.flush();
                        break;
Avatar billede roo104 Nybegynder
02. december 2003 - 10:00 #1
Nå ikke så mange svar, lukker.
Fik til dels løst problemet med at lade hver client der connectde til serveren starte hver sin tråd på serveren
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