Ich hab hier ein etwas größeres Problem.
Beim Registrieren eines Accounts erstellt der Client aufgrund der eingegeben Daten ein OnlineShopProfile.
Dieses wird dann über einen ObjectOutputStream vom Client zum Server geschickt. Der Server empfängt mit einem ObjectInputStream.
Das Problem: Auf dem Server kommen zwar alle Byte an, aber das Profil besitzt auf dem Server fünf Null-Werte anstelle von den eingegeben Werten.
Folgende Attribute sind davon betroffen: username, keyword, email, firstname, lastname
Am Anfang hab ich das komplette Objekt über die writeObject() Methode des ObjectOutputStreams geschickt, da aber dort der oben genannte Fehler auftrat, hab ich die Funktion umgeschrieben und wandle das Objekt nun in ein byte[] Array um und verschicke es in 128 Byte großen Paketen.
Das ist mal die Ausgabe des Clients und des Servers. Wie man sieht sind die Bytes die selben, aber der Hashcode und die Attribute unterscheiden sich.
Ausgabe des Clients:
Ausgabe des Servers:
OnlineShopProfile schaut folgendermaßen aus:
Und die Oberklasse Profil:
Client:
Server:
Ich hoffe ihr könnt mir bei meinem Problem helfen.
Beim Registrieren eines Accounts erstellt der Client aufgrund der eingegeben Daten ein OnlineShopProfile.
Dieses wird dann über einen ObjectOutputStream vom Client zum Server geschickt. Der Server empfängt mit einem ObjectInputStream.
Das Problem: Auf dem Server kommen zwar alle Byte an, aber das Profil besitzt auf dem Server fünf Null-Werte anstelle von den eingegeben Werten.
Folgende Attribute sind davon betroffen: username, keyword, email, firstname, lastname
Am Anfang hab ich das komplette Objekt über die writeObject() Methode des ObjectOutputStreams geschickt, da aber dort der oben genannte Fehler auftrat, hab ich die Funktion umgeschrieben und wandle das Objekt nun in ein byte[] Array um und verschicke es in 128 Byte großen Paketen.
Das ist mal die Ausgabe des Clients und des Servers. Wie man sieht sind die Bytes die selben, aber der Hashcode und die Attribute unterscheiden sich.
Ausgabe des Clients:
Größe des Profils: 459 Bytes
Hashcode: 1322361674
Profil-Inhalt: Hans Mueller dacdf hans.mueller@gmx.de Hans Mueller Rosenstrasse 15 95824 Musterstadt Deutschland Hans Mueller 252584235962 85024030
-84 -19 0 5 115 114 0 23 109 111 100 101 108 46 79 110 108 105 110 101 83 104 111 112 80 114 111 102 105 108 101 -82 -28 97 -4 52 82 6 104 2 0 4 73 0 10 99 117 115 116 111 109 101 114 73 68 76 0 7 97 99 99 111 117 110 116 116 0 15 76 109 111 100 101 108 47 65 99 99 111 117 110 116 59 76 0 8 99 117 115 116 111 109 101 114 116 0 16 76 109 111 100 101 108 47 67 117 115 116 111 109 101 114 59 76 0 9 111 114 100 101 114 76 105 115 116 116 0 21 76 106 97 118 97 47 117 116 105 108 47 65 114 114 97 121 76 105 115 116 59 120 112 0 0 0 0 115 114 0 13 109 111 100 101 108 46 65 99 99 111 117 110 116 -9 101 14 51 -95 126 -76 63 2 0 3 74 0 6 110 117 109 98 101 114 76 0 3 98 76 90 116 0 18 76 106 97 118 97 47 108 97 110 103 47 83 116 114 105 110 103 59 76 0 5 111 119 110 101 114 113 0 126 0 6 120 112 0 0 0 58 -49 49 -109 -70 116 0 8 56 53 48 50 52 48 51 48 116 0 12 72 97 110 115 32 77 117 101 108 108 101 114 115 114 0 14 109 111 100 101 108 46 67 117 115 116 111 109 101 114 -79 -52 34 -115 127 70 56 -56 2 0 4 76 0 4 99 105 116 121 113 0 126 0 6 76 0 7 99 111 117 110 116 114 121 113 0 126 0 6 76 0 3 112 76 90 113 0 126 0 6 76 0 6 115 116 114 101 101 116 113 0 126 0 6 120 112 116 0 11 77 117 115 116 101 114 115 116 97 100 116 116 0 11 68 101 117 116 115 99 104 108 97 110 100 116 0 5 57 53 56 50 52 116 0 15 82 111 115 101 110 115 116 114 97 115 115 101 32 49 53 115 114 0 19 106 97 118 97 46 117 116 105 108 46 65 114 114 97 121 76 105 115 116 120 -127 -46 29 -103 -57 97 -99 3 0 1 73 0 4 115 105 122 101 120 112 0 0 0 0 119 4 0 0 0 10 120
Ausgabe des Servers:
Größe des Profils: 459 Bytes
Hashcode: 619601171
Profil-Inhalt: null null null null null Rosenstrasse 15 95824 Musterstadt Deutschland Hans Mueller 252584235962 85024030
-84 -19 0 5 115 114 0 23 109 111 100 101 108 46 79 110 108 105 110 101 83 104 111 112 80 114 111 102 105 108 101 -82 -28 97 -4 52 82 6 104 2 0 4 73 0 10 99 117 115 116 111 109 101 114 73 68 76 0 7 97 99 99 111 117 110 116 116 0 15 76 109 111 100 101 108 47 65 99 99 111 117 110 116 59 76 0 8 99 117 115 116 111 109 101 114 116 0 16 76 109 111 100 101 108 47 67 117 115 116 111 109 101 114 59 76 0 9 111 114 100 101 114 76 105 115 116 116 0 21 76 106 97 118 97 47 117 116 105 108 47 65 114 114 97 121 76 105 115 116 59 120 112 0 0 0 0 115 114 0 13 109 111 100 101 108 46 65 99 99 111 117 110 116 -9 101 14 51 -95 126 -76 63 2 0 3 74 0 6 110 117 109 98 101 114 76 0 3 98 76 90 116 0 18 76 106 97 118 97 47 108 97 110 103 47 83 116 114 105 110 103 59 76 0 5 111 119 110 101 114 113 0 126 0 6 120 112 0 0 0 58 -49 49 -109 -70 116 0 8 56 53 48 50 52 48 51 48 116 0 12 72 97 110 115 32 77 117 101 108 108 101 114 115 114 0 14 109 111 100 101 108 46 67 117 115 116 111 109 101 114 -79 -52 34 -115 127 70 56 -56 2 0 4 76 0 4 99 105 116 121 113 0 126 0 6 76 0 7 99 111 117 110 116 114 121 113 0 126 0 6 76 0 3 112 76 90 113 0 126 0 6 76 0 6 115 116 114 101 101 116 113 0 126 0 6 120 112 116 0 11 77 117 115 116 101 114 115 116 97 100 116 116 0 11 68 101 117 116 115 99 104 108 97 110 100 116 0 5 57 53 56 50 52 116 0 15 82 111 115 101 110 115 116 114 97 115 115 101 32 49 53 115 114 0 19 106 97 118 97 46 117 116 105 108 46 65 114 114 97 121 76 105 115 116 120 -127 -46 29 -103 -57 97 -99 3 0 1 73 0 4 115 105 122 101 120 112 0 0 0 0 119 4 0 0 0 10 120
OnlineShopProfile schaut folgendermaßen aus:
Java:
package model;
import java.io.Serializable;
import java.util.ArrayList;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
@XmlType(propOrder = {"customerID", "customer", "account", "orderList"})
public class OnlineShopProfile extends Profil implements Serializable
{
private static final long serialVersionUID = -5844438680582617496L;
private int customerID;
private Customer customer;
private Account account;
private ArrayList<Order> orderList;
public void init(String username, String keyword, String eMail, int customerID, Customer customer, Account account, ArrayList<Order> orderList)
{
super.init(username,keyword,eMail);
this.customerID = customerID;
this.customer = customer;
this.account = account;
this.orderList = orderList;
}
@XmlElement(name = "customerID")
public int getCustomerID()
{
return customerID;
}
@XmlElement(name = "customer")
public Customer getCustomer()
{
return customer;
}
@XmlElement(name = "account")
public Account getAccount()
{
return account;
}
@XmlElement(name = "order")
public ArrayList<Order> getOrderList()
{
return orderList;
}
public String toString()
{
return super.toString()+" "+customer.toString()+" "+account.toString();
}
}
Und die Oberklasse Profil:
Java:
package model;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
@XmlType(propOrder = {"username", "keyword", "EMail"})
public abstract class Profil
{
private String username;
private String keyword;
private String eMail;
protected void init(String username, String keyword, String eMail)
{
this.username = username;
this.keyword = keyword;
this.eMail = eMail;
}
@XmlElement(name = "username")
public String getUsername()
{
return username;
}
@XmlElement(name = "keyword")
public String getKeyword()
{
return keyword;
}
@XmlElement(name = "email")
public String getEMail()
{
return eMail;
}
public String toString()
{
return username+" "+keyword+" "+eMail;
}
}
Client:
Java:
package test;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import model.*;
public class Client
{
private String ip;
private int port;
private Socket socket;
public static void main(String[] args)
{
Client client = new Client("localhost", 55000);
try
{
client.connect();
client.sendProfile();
}
catch (UnknownHostException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
public Client(String ip, int port)
{
this.ip = ip;
this.port = port;
}
public void connect() throws UnknownHostException, IOException
{
socket = new Socket(ip, port);
}
public void sendProfile() throws IOException
{
OnlineShopProfile profile = createProfile();
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
byte[] array = transformToByteArray(profile);
int bufferSize = 128;
int size = array.length;
int pointer = 0;
int remaining = size;
System.out.println("Größe des Profils: " + size + " Bytes");
System.out.println("Hashcode: " + profile.hashCode());
System.out.println("Profil-Inhalt: " + profile.toString());
oos.writeInt(size);
oos.flush();
while (remaining > 0)
{
if (remaining < bufferSize)
{
oos.write(array, pointer, remaining);
}
else
{
oos.write(array, pointer, bufferSize);
}
remaining -= bufferSize;
pointer += bufferSize;
}
for (int i = 0; i < array.length; i++)
{
System.out.print(array[i] + " ");
}
oos.close();
socket.close();
}
private byte[] transformToByteArray(Serializable object) throws IOException
{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(object);
return bos.toByteArray();
}
private OnlineShopProfile createProfile()
{
Customer customer = new Customer();
customer.init("Hans", "Mueller", new GregorianCalendar(2012, 04, 20), "Rosenstrasse 15", "95824", "Musterstadt", "Deutschland");
Account account = new Account();
account.init("Hans Mueller", 252584235962L, "85024030");
OnlineShopProfile profile = new OnlineShopProfile();
profile.init("Hans Mueller", "dacdf", "hans.mueller@gmx.de", 0, customer, account, new ArrayList<Order>());
return profile;
}
}
Server:
Java:
package test;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;
import model.*;
public class Server
{
private ServerSocket socket;
private Socket client;
private int port;
public static void main(String[] args)
{
Server server = new Server(55000);
try
{
server.startServer();
server.receiveProfile();
}
catch (IOException e)
{
e.printStackTrace();
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
}
public Server(int port)
{
this.port = port;
}
public void startServer() throws IOException
{
socket = new ServerSocket(port);
}
public void receiveProfile() throws IOException, ClassNotFoundException
{
client = socket.accept();
ObjectInputStream ois = new ObjectInputStream(client.getInputStream());
int size = ois.readInt();
System.out.println("Größe des Profils: " + size + " Bytes");
int bufferSize = 128;
byte[] array = new byte[size];
int pointer = 0;
int remaining = size;
while (remaining > 0)
{
if (remaining < bufferSize)
{
ois.read(array, pointer, remaining);
}
else
{
ois.read(array, pointer, bufferSize);
}
pointer += bufferSize;
remaining -= bufferSize;
}
OnlineShopProfile profile = (OnlineShopProfile)transformByteArrayToObject(array);
System.out.println("Hashcode: " + profile.hashCode());
System.out.println("Profil-Inhalt: " + profile.toString());
for (int i = 0; i < array.length; i++)
{
System.out.print(array[i] + " ");
}
ois.close();
client.close();
}
private Object transformByteArrayToObject(byte[] array) throws IOException, ClassNotFoundException
{
ByteArrayInputStream bis = new ByteArrayInputStream(array);
ObjectInputStream ois = new ObjectInputStream(bis);
return ois.readObject();
}
}
Ich hoffe ihr könnt mir bei meinem Problem helfen.