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;
