Problem mit Server/Client mit ObjectOutputStream

Status
Nicht offen für weitere Antworten.

webhalf

Neues Mitglied
Moin Moin ^.^


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
 
S

SlaterB

Gast
lustig, dazu hat gerade jemand anders vor kurzem erst einen Link gepostet, vorher wußte ich das auch nicht:

http://www.javaspecialists.eu/archive/Issue166.html
Here is a rule to remember: Never serialize mutable objects. We could relax this rule a little bit to: Don't re-serialize modified objects without first resetting the stream. Another approach is to always copy mutable objects before serialization. None of these relaxations will necessarily give you the intended behaviour.
da du kaum einen neuen ObjectOutputStream aufmachen kannst,
bleibt wohl nur reset() oder Objekt kopieren

ersteres funktioniert bei mir auch in diesem Fall
 

HoaX

Top Contributor
ich versteh die fage nicht ganz. welches verhalten willst du erreichen?

so stehts ja im code. für jeden client wird die zahl um 1 erhöht und der neue wert zugesand.

client1 bekommt 1, client 2 die 2, ....
 
S

SlaterB

Gast
> Glaub das könnte ich gewesen sein

ich hatte den Hobbit in Erinnerung, aber auch so gut ;)
ich wußte schon, dass ich keinen Namen erwähnen sollte

-------

@Hoax:
jeder Client soll den aktuellsten Wert 2 erhalten,
im Server-Objekt steht ja auch 2 und es gibt nur ein Server-Objekt,

im OutputStream-Cache ist das alte Objekt mit Wert 1 enthalten
 

webhalf

Neues Mitglied
jo das mit dem reset funktioniet
aber jedesmal ein erset durchführen ist ja auch blöd hm.......

@Hoax
SlaterB hat recht ;)
jeder sollte den aktualisierten wert bekommen ...

das programm da oben war nur ein test, denn in einem größeren programm funktionierte es auc nicht und dann reduziert man es halt auf den fehler und testet mit herum und wundert sich ^.^


dann dankeschön ;-)
werd mir auch mal die anderen sachen von javaspecialists.eu durchlesen :D
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Server-Client IO Problem Netzwerkprogrammierung 6
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
B Client/Server Connection Problem Netzwerkprogrammierung 2
M Problem Client - Server Sockets: .ready() wird nie true! Netzwerkprogrammierung 6
X Problem mit Server-Client-Kommunikation Netzwerkprogrammierung 14
K Client - Server Problem Netzwerkprogrammierung 16
T RMI Problem Client-Server Netzwerkprogrammierung 2
J Socket Client - Server Problem Netzwerkprogrammierung 4
D Client Server Problem, Methode readline() löst SocketException "Connection reset" aus Netzwerkprogrammierung 8
J Client server problem Netzwerkprogrammierung 3
S Problem bzgl. Sockets / Server-Client-Struktur Netzwerkprogrammierung 3
N Socket Java server c# client problem Netzwerkprogrammierung 7
K Problem Performance Client-Server Netzwerkprogrammierung 5
S Client-Server Chat Problem nur im lokalen Netztwerk Netzwerkprogrammierung 23
K Client-Server Problem Netzwerkprogrammierung 2
G Problem mit Client-Server Kommunikation Netzwerkprogrammierung 4
S Client/Server Problem Netzwerkprogrammierung 2
A Client Server Problem Netzwerkprogrammierung 37
G Problem bei Objekt senden von server zu client Netzwerkprogrammierung 6
L ganz ganz einfach Client/Server [Problem] Netzwerkprogrammierung 2
R Java Applikation als Client ,Servlet als Server: Problem? Netzwerkprogrammierung 3
V Client Server Problem, empängt oder sendet nichts Netzwerkprogrammierung 4
M HttpUrlConnection + Client/Server Problem Netzwerkprogrammierung 2
S Problem mit der Client Server Netzwerkprogrammierung 6
S Habe ein Problem mit Sockets -> Client Server Netzwerkprogrammierung 2
G Datenautausch Client/Server , hab da ein kleines problem Netzwerkprogrammierung 3
L Socket Problem mit Server Netzwerkprogrammierung 1
J Chat Server starten über GUI problem Netzwerkprogrammierung 4
Shams Problem mit Eventbus in Verbindung mit Server Netzwerkprogrammierung 0
T Socket Server starten Thread Problem Netzwerkprogrammierung 12
D Apache CXF, JAX-WS Problem bei Arrays - einfacher Server Netzwerkprogrammierung 2
M Problem mit Server Netzwerkprogrammierung 5
W vista / win server 2003 netzlaufwerk problem Netzwerkprogrammierung 4
M Server Problem Netzwerkprogrammierung 3
S RMI-Problem: Nur ein Server start möglich. Netzwerkprogrammierung 40
U problem mit verbindung zu einem irc server Netzwerkprogrammierung 3
G Problem bei Server verbindung : ( Netzwerkprogrammierung 8
J Kleines Problem mit Chat Server Netzwerkprogrammierung 2
S problem mit server Netzwerkprogrammierung 2
S RMI Server Basic Problem Netzwerkprogrammierung 13
I Socket Problem mit den WebSocket Antworten der Discord API Netzwerkprogrammierung 0
K Java Websocketserver Problem | Android to Pi Netzwerkprogrammierung 1
C RMI Produzent-Verbraucher-Problem - Code review Netzwerkprogrammierung 12
B Socket Bilder verschicken via Sockets. Heap-Problem. Netzwerkprogrammierung 2
S Problem bei dem Bluetoothverbindungsaufbau Netzwerkprogrammierung 2
M Netty - TCP Problem Netzwerkprogrammierung 4
M Problem bei Socket (MultiplayerSpiel) Netzwerkprogrammierung 4
M Socket CDI, Websocket reference Problem ! Netzwerkprogrammierung 2
G apache httpClient Problem. Netzwerkprogrammierung 5
H Problem mit ObjectStreams Netzwerkprogrammierung 3
D Socket BufferedWriter/Reader Problem Netzwerkprogrammierung 1
Maxim6394 Problem mit Socks5 Implementierung Netzwerkprogrammierung 0
C Handle Connection Problem Netzwerkprogrammierung 3
E HttpUrlConnection Cookie Problem Netzwerkprogrammierung 0
X Problem mit vielen Bytes über Socket Netzwerkprogrammierung 23
O 4Gewinnt Multiplayer - Netzwerk Problem (TCP) Netzwerkprogrammierung 1
A Socket Socket-Problem - Object wird nicht übertragen Netzwerkprogrammierung 3
R Problem beim Programmieren eines Chatprogramms Netzwerkprogrammierung 5
E einfaches Problem: Session-Handling bei Servlets Netzwerkprogrammierung 5
G Problem mit einem FileWatcher Netzwerkprogrammierung 7
G Problem mit STATIC-Verständnis Netzwerkprogrammierung 8
S Umstellung AS400 auf Postgre - Problem beim Arbeiten mit Metadaten Netzwerkprogrammierung 2
J Facelets Include Rendered Problem Netzwerkprogrammierung 2
J Socket Problem mit C++/Java Netzwerkprogrammierung 20
P Problem mit Datagram-Sockets Netzwerkprogrammierung 2
G Socket NIO2 Problem mit AsynchronousSocketChannel beim Schließen Netzwerkprogrammierung 3
G Cookie Verwaltungs Problem nach Login auf InetSeite (Wo utma-Cookie?) Netzwerkprogrammierung 18
C Socket Problem mit ObjectInput/OutputSream Netzwerkprogrammierung 7
B Socket Problem mit Netzwerkchat Netzwerkprogrammierung 21
D RMI Problem beim shutdown von verteilter CORBA-Anwendung Netzwerkprogrammierung 6
Maxim6394 ipv6 Problem Netzwerkprogrammierung 2
Maxim6394 Proxyserver Performance Problem Netzwerkprogrammierung 11
C Socket Problem mit ObjectInput/OutputSream Netzwerkprogrammierung 5
B RMI und Problem mit rmic-Tool Netzwerkprogrammierung 3
C FTP storeFileStream Problem Netzwerkprogrammierung 3
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
D JavaMail - Mailsabrufen Problem (imap) Netzwerkprogrammierung 12
J HTTP Übersetzung yahoo babelfish - Zeichensatz-Problem Netzwerkprogrammierung 6
M Problem beim Datenempfang Netzwerkprogrammierung 2
M Problem mit Socket-Verbindung Netzwerkprogrammierung 2
N NIO Problem beim speziellen Behandeln von einzelnen Benutzern Netzwerkprogrammierung 13
D Thread problem Netzwerkprogrammierung 3
T Servlets JSP: Tomcat Problem Netzwerkprogrammierung 4
P RMI Stub Problem Netzwerkprogrammierung 3
D Socket UDP Übertragungs Problem Netzwerkprogrammierung 7
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 2
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 6
D Problem mit ObjectInputStreams Netzwerkprogrammierung 10
D Socket Problem mit InputStreamReader Netzwerkprogrammierung 3
N CRC32 CheckSum Problem bei UDP Netzwerkprogrammierung 2
V Java Mail Api - IMAP Problem Netzwerkprogrammierung 6
P RMI Problem Netzwerkprogrammierung 4
I Problem bei Outputstreamerzeugung in anderer Klasse als Socket Netzwerkprogrammierung 5
S Socket Problem mit Objektübertragung Netzwerkprogrammierung 16
Shoox Reader / Writer Problem Netzwerkprogrammierung 2
S Problem mit 2 Serversockets unter Win XP Netzwerkprogrammierung 7
P Socket Problem mit Netzwerkverbindung über TCP Netzwerkprogrammierung 12
M RMI - Connection Problem Netzwerkprogrammierung 7
M Socket Chat-Client-Problem Netzwerkprogrammierung 8
E HTTP Problem beim Auslesen von Websiten Netzwerkprogrammierung 6

Ähnliche Java Themen

Neue Themen


Oben