Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich kann ein Objekt nicht serialisieren bzw. es geht aber die .dat Datei ist leer?
Das objekt buchAnlegen ist von der Klasse Buchdaten welche natürlich das interface Serializable implementiert,
wenn ich die .dat datei öffne ist sie leer?
yo habe den flush und close noch gemacht dannach gings. Kann ich den ein Object serialisieren sprich eine Instanz der "DatenKlasse" serialisieren ohne eine Datei selbst zu erstellen?
Ich möchte das objekt "meineBuchdaten" serialisieren (in ne datei gings) ohne in ne datei sch schreiben sprich direkt über den outgoing Stream über den socket zur server class transportieren.
wenn ich auf der server side das object ausgebe bzw. den Autornamen bekomme ich "null" ? Ich denke die daten werden gar nicht über den socket geschickt. Etwas ist falsch mit der serialisierung ?
Code:
public void run()
{
try
{
InetAddress ip = InetAddress.getByName("localhost");
Socket socket = new Socket(ip , ServerThread.PORT);
System.out.println("test");
ObjectOutputStream outgoingObject = new ObjectOutputStream(socket.getOutputStream()); // ObjectOutputStream for the object to be sent over socket to the server
// writing the class object "meineBuchdaten" into a file on the hard disk
ByteArrayOutputStream stream = new ByteArrayOutputStream();
try
{
outgoingObject = new ObjectOutputStream(stream);
outgoingObject.writeObject(meineBuchdaten);
outgoingObject.flush();
outgoingObject.close();
}
catch (NotSerializableException nse)
{
System.out.println("No Serialization of the class " + nse.getLocalizedMessage() + " is possible");
}
catch(IOException ioe)
{
System.out.println(ioe.getMessage());
}
// closing the ObjectOutputStream and the client connection to free resources
outgoingObject.close();
socket.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
Code:
public void run()
{
try
{
myServerSocket = new ServerSocket(PORT);
}
catch (IOException e)
{
e.printStackTrace();
}
System.out.println("Started: " + myServerSocket);
try
{
while(true)
{
// wait until the client connects...
myClientSocket = myServerSocket.accept();
System.out.println("Connection done - handshake " + myClientSocket);
ObjectInputStream incomingObject = new ObjectInputStream(myClientSocket.getInputStream());
// Reading the serialized data and cast it to the proper type
Buchdaten bd = (Buchdaten) incomingObject.readObject();
// Output of the deserialized data for test purposes
System.out.println("This should be the deserialized data: Autor: " + bd.getAutor());
// closing the ObjectInputStream and the client connection to free resources
incomingObject.close();
myClientSocket.close();
}
}
catch(Exception ex)
{
System.out.println(ex.getMessage());
}
}
Lösch' mal Zeile 17 im ersten Codefizzel, dann müsst's gehen .
Du leitest den Datenfluss in einen ByteArrayOutputStream um, ist dir das klar? Und das, weil du den ObjectOutputStream neu initialisierst.
Lösch' mal Zeile 17 im ersten Codefizzel, dann müsst's gehen .
Du leitest den Datenfluss in einen ByteArrayOutputStream um, ist dir das klar? Und das, weil du den ObjectOutputStream neu initialisierst.
Ei gar nicht . Ich hab dein Problem nur falsch verstanden, ich dachte, du willst ein Objekt Byte für Byte auslesen, und das machst du mit dem ByteArrayOutputStream.
Ei gar nicht . Ich hab dein Problem nur falsch verstanden, ich dachte, du willst ein Objekt Byte für Byte auslesen, und das machst du mit dem ByteArrayOutputStream.
seit ich nicht nur in eine Richtung der sockets schreibe sprich von client zu server sondern auch von server zu client also auf client und server seite nochmals eine ObjectInput/Outputstream habe bekomme ich socket fehler bzwl exceptions... kann mir jemand sagen wie ich das problem angehen kann?
dies ist wichtig ein Code ausschnitt aus der client.class:
Code:
ObjectInputStream incomingObject = new ObjectInputStream(socket.getInputStream());
//nach debuggen an dieser Stelle springt der cursor in die untere Exception ???
Buchdaten bd = (Buchdaten) incomingObject.readObject();
das ist die fehlermeldung dazu:
Code:
Connection done - handshake Socket[addr=/127.0.0.1,port=3893,localport=10001]
Socket is closed
Software caused connection abort: socket write error
java.net.SocketException: Software caused connection abort: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at java.io.ObjectInputStream$PeekInputStream.read(Unknown Source)
at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source)
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
at MainWindow$ClientThread.run(MainWindow.java:255)
Client.class
Code:
public class ClientThread extends Thread
{
ClientThread()
{
}
public void run()
{
try
{
InetAddress ip = InetAddress.getByName("localhost");
Socket socket = new Socket(ip , ServerThread.PORT);
System.out.println("test");
ObjectOutputStream outgoingObject = new ObjectOutputStream(socket.getOutputStream()); // ObjectOutputStream for the object to be sent over socket to the server
try
{
outgoingObject.writeObject(meineBuchdaten);
outgoingObject.flush();
outgoingObject.close();
}
catch (NotSerializableException nse)
{
System.out.println("No Serialization of the class " + nse.getLocalizedMessage() + " is possible");
}
catch(IOException ioe)
{
System.out.println(ioe.getMessage());
}
//nach debuggen springt der cursor in die untere Exception ???
ObjectInputStream incomingObject = new ObjectInputStream(socket.getInputStream());
Buchdaten bd = (Buchdaten) incomingObject.readObject();
myDataModel.setDataVector(bd.getArrayBuchdaten(),MainWindow.spaltennamen);
incomingObject.close();
socket.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
Server.class
Code:
public class ServerThread extends Thread
{
public static final int PORT = 10001;
private ServerSocket myServerSocket = null;
private Socket myClientSocket;
private Database myDatabase = new Database();
private Buchdaten meineBuchdaten = new Buchdaten();
public ServerThread()
{
}
public void run()
{
try
{
myServerSocket = new ServerSocket(PORT);
}
catch (IOException e)
{
e.printStackTrace();
}
System.out.println("Started: " + myServerSocket);
try
{
while(true)
{
// wait until the client connects...
myClientSocket = myServerSocket.accept();
System.out.println("Connection done - handshake " + myClientSocket);
/*----------------------- Daten über socket vom Client empfangen ------------------------------*/
ObjectOutputStream outgoingObject = new ObjectOutputStream(myClientSocket.getOutputStream());
try
{
outgoingObject.writeObject(meineBuchdaten);
outgoingObject.flush();
outgoingObject.close();
}
catch (NotSerializableException nse)
{
System.out.println("No Serialization of the class " + nse.getLocalizedMessage() + " is possible");
}
catch(IOException ioe)
{
System.out.println(ioe.getMessage());
}
/*----------------------- Daten über socket zum Client senden ------------------------------*/
ObjectInputStream incomingObject = new ObjectInputStream(myClientSocket.getInputStream());
// Reading the serialized data and cast it to the proper type
Buchdaten bd = (Buchdaten) incomingObject.readObject();
myDatabase.passData2Database(bd);
// closing the ObjectInputStream and the client connection to free resources
incomingObject.close();
myClientSocket.close();
}
}
catch(Exception ex)
{
System.out.println(ex.getMessage());
}
}
}