Moin Moin ^.^
ich habe folgendes problem
ich versuche folgendes objekt (MyObject) über das netzwerk mittels ObjectOutputStream zu versenden.
das funktioniert derzeit auch sehr gut.
so... nun erklär ich erstmal was mein server macht ;-)
er erstelt alls erstes nur ein objekt von MyObject und wartet dann auf eingehende verbindungen
sobalt eine eintrifft, wird der integewert im objekt erhöht und ein ServerThread gestartet, der dem client die ganze zeit das objekt senden...
nun kommt das problem was ich habe
sobald ein zweiter client eine verbindung aufbaut, wird zwar der integerwert erhöht und auch dem neuen clienten zugesandt,... dem vorherigen clienten jedoch wird noch das alte objekt zugesandt.....
sprich, der neue erhält die intzahl 2... der alte noch die intzahl 1
ich geh mal von aus, dass der serverthread sich immer das aktuelle objekt vom server holt udn es hinüber sendet....
da brauch ich nun hilfe ^.^
hier der rest des codes (server, serverthread und client)
mfg
Webhalf
ich habe folgendes problem
ich versuche folgendes objekt (MyObject) über das netzwerk mittels ObjectOutputStream zu versenden.
Code:
import java.io.Serializable;
class MyObject implements Serializable {
private int a=0;
public MyObject(int a){
this.a=a;
}
public int getA(){
return this.a;
}
public void setA(int a){
this.a=a;
}
}
das funktioniert derzeit auch sehr gut.
so... nun erklär ich erstmal was mein server macht ;-)
er erstelt alls erstes nur ein objekt von MyObject und wartet dann auf eingehende verbindungen
sobalt eine eintrifft, wird der integewert im objekt erhöht und ein ServerThread gestartet, der dem client die ganze zeit das objekt senden...
nun kommt das problem was ich habe
sobald ein zweiter client eine verbindung aufbaut, wird zwar der integerwert erhöht und auch dem neuen clienten zugesandt,... dem vorherigen clienten jedoch wird noch das alte objekt zugesandt.....
sprich, der neue erhält die intzahl 2... der alte noch die intzahl 1
ich geh mal von aus, dass der serverthread sich immer das aktuelle objekt vom server holt udn es hinüber sendet....
da brauch ich nun hilfe ^.^
hier der rest des codes (server, serverthread und client)
Code:
import java.io.*;
import java.net.*;
import java.util.*;
public class Server {
MyObject _mo;
public Server(){
this._mo=new MyObject(0);
}
public synchronized MyObject getMO(){
return _mo;
}
public static void main(String[] args) {
Server s = new Server();
s.doStart();
}
private void doStart(){
ServerSocket serverSocket=null;
try {
serverSocket = new ServerSocket(4444);
Socket socket=null;
while(true){
System.out.println("warte auf eingehende verbindung");
socket = serverSocket.accept();
System.out.println("eingehende verbindung akzeptiert");
MyObject m = this.getMO();
m.setA(m.getA()+1);
new ServerThread(this,socket).start();
System.out.println("ServerThread gestartet\n");
}
} catch(Exception e){
System.out.println("Exception -> "+e.getMessage());
e.printStackTrace();
}
}
}
Code:
import java.io.*;
import java.net.*;
class ServerThread extends Thread {
private MyObject _mo;
private Socket _socket;
private Server _s;
public ServerThread(Server s,Socket so){
this._s=s;
this._socket=so;
}
public void run(){
try {
boolean runST=true;
ObjectOutputStream out = new ObjectOutputStream(this._socket.getOutputStream());
while(runST){
out.writeObject(_s.getMO());
out.flush();
try {
this.sleep(1000);
} catch(InterruptedException e){
System.out.println("ServerThread -> InterruptedException");
}
}
} catch(IOException e){
System.out.println("ServerThread -> run() -> IOException");
e.printStackTrace();
}
try {
this._socket.close();
} catch(Exception e) {
System.out.println("ServerThread -> run() -> socket.close()");
e.printStackTrace();
}
}
}
Code:
import java.io.*;
import java.net.*;
import java.util.*;
public class Client {
public static void main(String[] args) {
MyObject mo;
try {
System.out.println("verbinden mit localhost");
Socket socket = new Socket( "127.0.0.1", 4444 );
System.out.println("--- in erstellen!!!");
ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
System.out.println("--- in erstellt");
while(true){
mo = (MyObject)in.readObject();
System.out.print("MyObject - anz: ");
System.out.println(mo.getA());
}
} catch(Exception e){
System.out.println("Exception: "+e.getMessage());
e.printStackTrace();
}
}
}
mfg
Webhalf