Šta je novo?

java: problem sa serijalizacijom

  • Začetnik teme range
  • Datum pokretanja
R

range

Guest
Imam klijenta koji salje objekat Konto serveru, koji ga deserijalizuje i
smesta u bazu. Klijent ima metode listenSocket(), kojim otvara Socket na
nekom portu, i metod sendKonto koji za parametre ima socket preko koga se
salje i objekat Konto koji se salje. Server ima isto metod listenSocket()
koji ima while(true) petlju u kojoj osluskuje klijente, deserijalizuje
objekte, i smesta podatke u bazu.Problem je u sledecem: samo jednaput ja
mogu da unesem podatke u bazu, posle tog jednog puta server pada uz
exception java.net.SocketException: Socket is closed, a ja stvarno nigde ne
zatvaram socket.Jel zna neko sta bi to moglo da bude?
Evo koda:
klijent :

[code:1]
public void listenSocket(){
ObjectOutputStream outputKonto = null;


socket = new Socket("HOST-NAME", 4444);
in = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
outputKonto = new ObjectOutputStream(socket.getOutputStream());
System.out.println("Connected!!!!!!! ");
}
catch (UnknownHostException e) {
System.out.println("Unknown host: ");
System.exit(1);
}
catch (IOException e) {
System.out.println("No I/O");
e.printStackTrace();
System.exit(1);
}
}
protected void sendKontoToServer(){
theKonto = this.getKonto1();
try{
socket = this.getSocket();
sendKonto(socket, theKonto);
}
catch (Exception e) {
System.out.println("Unknown host: ");
e.printStackTrace();
System.exit(1);
}

}

protected void sendKonto(Socket socket, Konto theKonto){
ObjectOutputStream outputToServer = null;
try{
outputToServer = new ObjectOutputStream(socket.getOutputStream());
outputToServer.writeObject(theKonto);
outputToServer.flush();
outputToServer.close();

}
catch (IOException e){
e.printStackTrace();
}
}
[/code:1]

server:
[code:1]
public void listenSocket(){
ObjectInputStream inputKonto = null;
Konto aKonto = null;
try{
server = new ServerSocket(4444);
client = server.accept();
System.out.println("Opened socket!");
}
catch(IOException ioE){
System.out.println("Could not listen on port 4444");
ioE.printStackTrace();
System.exit(-1);
}
try{
System.out.println("3");
inputKonto = new ObjectInputStream(client.getInputStream());
out = new PrintWriter(client.getOutputStream(), true);
}
catch(IOException ioE){
System.out.println("Accepting connection on port 4444failed!2");
ioE.printStackTrace();
System.exit(-1);
}
while(true){
try{
inputKonto = new ObjectInputStream(client.getInputStream());
out = new PrintWriter(client.getOutputStream(), true);
aKonto = (Konto)inputKonto.readObject();
inputKonto.close();
access.insertKonto(aKonto);


}
catch(Exception E){
System.out.println("Reading failed!" + E.getMessage());
E.printStackTrace();
System.exit(-1);
}
}
}
[/code:1]
 
Ne znam sta da ti kazem, ali nije nemoguce da je neki propust u samoj Java virtualnoj masini. Skokni do Sun-ovog sajta i proveri da li je ta greska prijavljena u spiskovima gresaka, i ako postoji, skini ispravku.
 
Resenje:

Nasao sam resenje, kod servera otvaram Socket samo za jednog klijenta, a posle u while petlji stalno radim sa tim istim socketom. E sad na klijent strani garbage colector je ocistio taj socket kad se posalje konto, pa mi stalno prijavljuje da je socket vec zatvoren. U svakom slucaju hvala na odgovoru
pozdrav
 
Nazad
Vrh Dno