Objekt über Socket übertragen

Status
Nicht offen für weitere Antworten.

Wagner

Mitglied
Guten Abend,

ich erlaube es mir einfach, hier meine Frage hineinzuschreiben *g*.

Also ich stand vor dem gleichen Problem, hab es dank der "Vertauschung" von Input und Output auch hinbekommen. Aber zu meinem eigentlichen Problem (wobei das Problem eher weniger mit Sockets etc. zu tun hat...eher mit den Basics von Java).

Also:

Ich hab bei mir im Client-Programm eine Innerclass (mit einem Attribut), in der Hauptklasse erstell ich ein Objekt von der Innerclass und schicke es an den Server.

Code:
out.writeObject(new Objekt());

Im Server-Programm "hol" ich mir dann das Objekt mit:

Code:
Object o = in.readObject();

Nun zu meiner Frage: Wie muss ich das machen, dass ich dann im Server-Programm mit dem wirklichen Objekt (vom Client) arbeiten kann? bzw. das Attribut verändern kann?

Zum Sinn des Programms: es gibt keinen...das ist nur ein Prototyp um mit dem Aufbau von Socket vertraut zu werden.

Und ja, ich kann mir gut vorstellen, dass Object nicht das Richtige ist. Aber mir fehlt einfach die richtige Spur grad.

Ich hoff ihr könnt erahnen, was mein Problem ist *g*

Schon im Vorraus vielen Dank für hilfreiche Antworten

mit freundlichen Grüßen
Wagner
 

Wildcard

Top Contributor
*aufteil*
Wagner hat gesagt.:
ich erlaube es mir einfach, hier meine Frage hineinzuschreiben *g*.
Dann 'erlaube' es dir in Zukunft bitte nicht mehr und mach direkt einen neuen Thread :roll:
Such mal nach dem Stichwort RMI.
 

Wagner

Mitglied
Oh tut mir vielmals Leid, eiglt sollte es eine Antwort werden zu einem bereits bestehenden Thread und nicht ein neuen Thread.
 

Wildcard

Top Contributor
Das war es auch und ich hab einen neuen daraus gemacht, weil es in dem anderen nichts verloren hat.
 

Wagner

Mitglied
Ok, hast recht.

Also nun zum Thema...
du meintest was mit RMI, ich hab mir grad ein groben (wirklich sehr groben) Überblick verschafft. Soviel ich bis jetzt mitbekommen hab, kann ich via RMI Methoden von "anderen Rechnern" aufrufen.

Aber mein Problem ist ja nicht, dass ich was aufrufen will von einem anderen Rechner, sondern ich möchte ein Objekt von Client an Server schicken und dieses Objekt auf dem Server bearbeiten.

Ich hab aber leider keine Vorstellung wie. Ich bin mir 100% sicher, dass das "Object o = in.readObject();" nicht stimmen kann. Weil ich schicke ja ein "Objekt" und dort weis ich ja dann "Object" "Objekt" zu. (ich weiß, sehr verwirrend *g*)

Allerdings hab ich mich auch gefragt, dass der auf dem Server befindliche Code gar nicht wissen kann, dass das Objekt ein Attribut hat, was mich nun doch wieder auf RMI bringt.

Jetzt meine Frage, kann ich via RMI auch auf Attribute von anderen Rechner zugreifen? Oder soll ich das mit einer Methode verändern? (z.b. setAttribut(zahl))

Und wenn wir schon beim Thema RMI sind, hat mir jemand einen Link, auf dem die Syntax, der Aufbau, der Sinn klar und eindeutig auf deutsch erklärt wird?

mit freundlichen Güßen
Wagner
 

Wildcard

Top Contributor
Du kannst das Objekt natürlich nicht direkt im Speicher auf einem anderen Rechner verändern, aber RMI versteckt diese Tatsache vor dir. Es fühlt sich also so an, als würden Server und Client das gleiche Objekt verwenden.
Schau dir dazu am besten die Java Insel an.
 
T

tuxedo

Gast
Sofern es dir wirklich nur um die Übertragung geht, lautet die Frage auf deine eingehende Antwort: "casten"

Code:
// Objekt senden
out.writeObject(new MeinObjekt(meinParameter1, meinParameter2));

// Objekt empfangen
Object o = in.readObject();
MeinObjekt meinObjekt = null;
if (o instanceof MeinObjekt)
        {
            meinObjekt = (MeinObjekt) o;
            // ab hier kannst du das gesendete und wieder empfangene Objekt wieder voll nutzen und auf Methoden und Parameter zugreifen
        }
 
W

Wagner1

Gast
Also ich hab das jetzt so gemacht.

Ich hab eine Innerclass in meinem Client-Programm gemacht (mit implements Serializable), dann erstell ich ein Objekt und sende das an das Server-Programm.

Aber dann weiß ich nicht weiter, denn laut deinem Code muss ja der Server die gleiche Klasse haben bzw. auch ein Objekt von der Klasse anlegen. Also hab ich ebenfalls eine Innerclass gemacht (gleicher Name, gleiche Attribute usw.).

Aber in die Abfrage "if (o instanceof MeinObjekt) " kommt es nicht rein, an was liegt das? Hab ich einen falschen Ansatz? wenn ja, würde ich mich um eine grobe Erklärung freuen.

mfg
Wagner
 

Wildcard

Top Contributor
Die beiden Klassen haben nicht das geringste miteinander zu tun. Und wenn du sie drei mal gleich benennst. Es muss schon die selbe Klasse sein.
 

Wagner

Mitglied
Also erst mal frohe Weihnachten ;)

Ich nehm mir jetzt einfach mal viel Zeit um meine Fragen und Probleme zu schildern, denn ich muss das in den Weihnachtsferien hinbekommen für ein Projekt und auch eine Präsentation.

Also ich hab ein Projekt gemacht. In dem Projekt gibt es 3 Klassen:

- Client.java
- Server.java
- Objekt.java

Meine Vorstellung ist so:

Jeder Client schickt ein Objekt mit all seinen Daten an den Server, dieser speichert dann jedes Objekt von den Clienten in einem (Objekt)Array. Der Server soll dann anschließend alle Objekte an alle Clienten schicken. (Netzwerkspiel soll es werden). Und zum testen, will ich, dass der Server einfach mal die Attribute von den Objekten ändert (ohne jeglichen Sinn).

Nun zu meinem Code:

Einmal der Server:

Code:
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        
        ServerSocket server = new ServerSocket(4242);
        
        while (true) {
            
            Socket client = server.accept();
            
            ObjectInputStream in = new ObjectInputStream(client.getInputStream());
            ObjectOutputStream out = new ObjectOutputStream(client.getOutputStream());

            Object o = in.readObject();
            Objekt mo = null;
            if (o instanceof Objekt) {
                mo = (Objekt) o;
                mo.ID = 2;
            }

            out.writeObject(mo);
            out.flush();
            
            out.close();
            in.close();
            client.close();
        }
    } 
}
...erklärt sich eiglt. von selbst.

Client:

Code:
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.net.Socket;

public class Client {
    
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        
        Socket server = new Socket("localhost", 4242 );
        
        ObjectOutputStream out = new ObjectOutputStream(server.getOutputStream());
        ObjectInputStream in = new ObjectInputStream(server.getInputStream());
        
        out.writeObject(new Objekt());
        out.flush();
        Object o = in.readObject();
        Objekt mo = null;
            if (o instanceof Objekt) {
                mo = (Objekt) o;
                System.out.println(mo.ID);
            }

        in.close();
        out.close();
        server.close();
    }
}

Und nun das sinnlose Objekt:

Code:
import java.io.Serializable;

public class Objekt implements Serializable{
    
    public int ID;

    public Objekt() {
    }
    
}


"Serializable" hab ich auch, weil ich es irgendwo gelesen hab, allerdings würde ich mich über eine Erklärung freuen, warum man das machen muss.

Was ich vllt. noch dazu sagen sollte, ich nehme ja ein "localhost" und starte die beiden Klassen einfach mit einer Befehlsbox.

Und nun zum eigentlich Problem: Wenn ich z.b. beim Server in die Abfrage "if(o instanceof Objekt)" ein System.out reinmache (um zu überprüfen, ob es wirklich rein kommt), kommt es einfach nicht rein und ich weiß nicht warum.

Also schonmal vielen Dank im Vorraus und ein schönes Fest

mit freundlichen Grüßen
Wagner
 

Wildcard

Top Contributor
"Serializable" hab ich auch, weil ich es irgendwo gelesen hab, allerdings würde ich mich über eine Erklärung freuen, warum man das machen muss.
Serializable ist ein Marker Interface, das angibt ob eine Klasse serialisiert werden darf, oder nicht.
Und nun zum eigentlich Problem: Wenn ich z.b. beim Server in die Abfrage "if(o instanceof Objekt)" ein System.out reinmache (um zu überprüfen, ob es wirklich rein kommt), kommt es einfach nicht rein und ich weiß nicht warum.
Das habe ich dir oben bereits erklärt.
 

Wagner

Mitglied
Die beiden Klassen haben nicht das geringste miteinander zu tun. Und wenn du sie drei mal gleich benennst. Es muss schon die selbe Klasse sein.

wie muss ich das verstehen? wie muss ich das im Code realisieren? (nur kurz andeuten)
Weil ich versteh nicht, wie das zusammenhängen soll : /

schonmal vielen Dank im Vorraus

mit freundlichen Grüßen
Wagner

p.s.: frohes Fest ;) (lasst euch 's schmecken)
 

Wagner

Mitglied
Edit:

Ich weiß zwar nicht genau, was ich verändert habe, aber nun funktioniert es ;)

Aber mir werden sicherlich noch einige Fragen aufkommen, deswegen würde ich mich freuen, wenn der Thread aufrecht erhalten wird :p

gruß Wagner
 

Wildcard

Top Contributor
wie muss ich das verstehen? wie muss ich das im Code realisieren? (nur kurz andeuten)
Weil ich versteh nicht, wie das zusammenhängen soll : /
Die Klasse des Objekts das du serialisierst, muss dem Server bekannt sein. Du kannst nicht einfach eine 'nachbauen' die sö ähnlich aussieht.
 
T

tuxedo

Gast
Zu deutsch:

GENAU DIE Class-File des Objektes das du "versenden" willst, muss dem Server vorliegen.

;-)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Objekt über socket senden/empfangen Netzwerkprogrammierung 3
M Objekt über Object-Stream, empfange "alte" Daten Netzwerkprogrammierung 2
J Objekt mit RSA und AES verschlüsseln und entschlüsseln HILFE Netzwerkprogrammierung 4
OnDemand Json Objekt leeres Array beim lesen Netzwerkprogrammierung 9
I Socket ObjectOutputStream-Socket: Objekt wird falsch übertragen Netzwerkprogrammierung 2
L Java RMI Objekt konsistenz Netzwerkprogrammierung 1
P RMI - Neue eigene Instanz für jeden Aufruf auf nicht serialisierbares Objekt - wie? Netzwerkprogrammierung 0
R RMI und Entferntes Objekt (EO) Netzwerkprogrammierung 0
A Server Antwort enthält JSON Objekt/Array Netzwerkprogrammierung 8
N Selbes URL Objekt für alle Requests nutzen Netzwerkprogrammierung 7
B udp erkennen um welches objekt es sich handelt / max size Netzwerkprogrammierung 5
S Socket Client liest leeres Objekt Netzwerkprogrammierung 10
D Remote-Objekt-Server : Alternative Methodenaufruflogik zu Reflection und hart codiert Netzwerkprogrammierung 5
K RMI Angemeldetes Objekt nicht aktuell? Netzwerkprogrammierung 9
D [CORBA] Eigenes Objekt in idl? undefined type Netzwerkprogrammierung 5
H Objekt von JSP an Servlet übergeben Netzwerkprogrammierung 4
T Wieso ist mein Objekt leer? Netzwerkprogrammierung 6
L RMI-Objekt zwischen zwei RMI-Servern kopieren Netzwerkprogrammierung 2
S Objekt Felder versenden Netzwerkprogrammierung 5
G Problem bei Objekt senden von server zu client Netzwerkprogrammierung 6
P RMI - Objekt als Rückgabeparameter Netzwerkprogrammierung 3
M RMI - Ein Objekt für Alle? Netzwerkprogrammierung 5
H Versenden von Objekt Netzwerkprogrammierung 2
J Prblem, wenn im verschickten Objekt ein Array ist Netzwerkprogrammierung 4
K Tabelle im Web über Listener aufrufen Netzwerkprogrammierung 1
F Verbindung zu einem LDAP Server über Java Netzwerkprogrammierung 4
S Socket Bilder über Socket Senden Netzwerkprogrammierung 0
B Zip Dateien über FTP laden Netzwerkprogrammierung 2
x46 byte[] über BufferedReader auslesen Netzwerkprogrammierung 18
E Socket Parameter über Sockets übergeben und auslesen ! Netzwerkprogrammierung 5
L Webbasierte Anwendung - Authentifizierung über LDAP/ActiveDirectory Netzwerkprogrammierung 5
J Probleme mit Multicast über IPv6, DatagramChannel Netzwerkprogrammierung 1
S Daten über TCP/IP senden Netzwerkprogrammierung 3
T Broadcast-message über spez. Netzwerk-Schnittstelle Netzwerkprogrammierung 1
T Mikrofonaudio über Java Server an Webbrowser streamen Netzwerkprogrammierung 13
M Erstelltes Programm über Internet Browser ausführen Netzwerkprogrammierung 26
T VPN-Verbindung über Java Netzwerkprogrammierung 4
V Einfachen Javaserver über das Internet erreichbar machen Netzwerkprogrammierung 2
J FTP Upload über Proxy funktioniert nicht Netzwerkprogrammierung 1
E Kurze Textnachrichten über einen Server von meinem Handy auf den Computer laden. Netzwerkprogrammierung 9
J FTP FTP Zugriff über Proxy Server Netzwerkprogrammierung 1
Thallius Java Application über ZScaler benutzer? Netzwerkprogrammierung 0
J Chat Server starten über GUI problem Netzwerkprogrammierung 4
V einfaches hin und her von Text über Server Netzwerkprogrammierung 2
P RMI Client Server Programm über Internet Netzwerkprogrammierung 2
antonbracke Multiuser Software über XMPP Server Netzwerkprogrammierung 1
Z Verbindung zwischen 2 Rechnern über ServerSockets nicht möglich Netzwerkprogrammierung 3
cezary Socket ServerSocket starten über GUIIm unterstehenden Code versuche Netzwerkprogrammierung 6
I ASCII über serielle Schnittstelle Netzwerkprogrammierung 1
N RMI "RMI über Lan funktioniert nicht" & "RMI-Server im Lan scannen" Netzwerkprogrammierung 13
L Mit Java über PHP in MySQL anmelden (Login script) Netzwerkprogrammierung 3
M Socket String Arrays über Socket an Server schicken Netzwerkprogrammierung 2
T Socket Methoden über Internet aufrufen Netzwerkprogrammierung 1
S Socket Kommunikation über Internet Netzwerkprogrammierung 1
X Problem mit vielen Bytes über Socket Netzwerkprogrammierung 23
K ByteArray über Netzwerk senden klappt nicht Netzwerkprogrammierung 5
M allgemeine Frage über Server-Client-Kommunikation Netzwerkprogrammierung 5
P RMI Threads die über RMI auf Datenbank zugreifen Netzwerkprogrammierung 2
S Datei schreiben über Applet Netzwerkprogrammierung 8
G Klassen über Netzwerk kommunizieren lassen Netzwerkprogrammierung 6
J Erster Server-Client läuft auf lokalem Rechner problemlos. Zwei Rechner über das Internet nicht Netzwerkprogrammierung 8
Kjubert Synchronisieren von Objekten über Client/Server - bester Weg? Netzwerkprogrammierung 7
S ImageIcon über Socket schicken (Serialisierung) Netzwerkprogrammierung 6
H Socket Objekte über Socket? Allgemeine Verständnisprobleme in Sachen Socket Netzwerkprogrammierung 3
S Seltsames Verhalten beim Empfangen von Daten über DataInputStream Netzwerkprogrammierung 12
A TCP über UDP Verbindung? Netzwerkprogrammierung 10
C Datei über Socket schreiben und Ereignis lesen Netzwerkprogrammierung 9
D Socket Class über Netzwerk verschicken Netzwerkprogrammierung 2
D JNLP über Webstart funktioniert nicht... Netzwerkprogrammierung 2
J Socket Dateien über Socket auf Server speichern Netzwerkprogrammierung 3
D Socket Datei nur stückweise über Socket verschicken Netzwerkprogrammierung 6
G Bild über Socket schicken - Client/Server Netzwerkprogrammierung 10
A Computer über Internet verbinden Netzwerkprogrammierung 12
N über Java in eine Text-Datei auf einem Server schreiben Netzwerkprogrammierung 2
c_sidi90 ideale Lösung, Screen Capture über Netzwerk Netzwerkprogrammierung 3
S Socket Verschiedene Exceptions beim Übertragen von Bildern über Socket Netzwerkprogrammierung 20
T ArrayList über Netzwerk senden! Netzwerkprogrammierung 5
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
T Verbindungsversuche über TCP Sockets von mehreren Threads führt zu Serverabsturz Netzwerkprogrammierung 2
V Authentifikation über mehrere Server? Netzwerkprogrammierung 3
C Verbindung zu einem Hostrechner über das Internet herstellen Netzwerkprogrammierung 15
M Map über Webservice übertragen Netzwerkprogrammierung 3
D Mehrere Clients über Java-Sockets Netzwerkprogrammierung 13
P Socket Verbindung über das Internet Netzwerkprogrammierung 2
Z Socket Connection reset by peer nur per IP nicht über localhost Netzwerkprogrammierung 13
ruffio1978 Telnet über ein socket ansprechen Netzwerkprogrammierung 8
F Socket Verbindungen über mehrere Server Netzwerkprogrammierung 4
U Datei über das Netzwerk einlesen und speichern Netzwerkprogrammierung 8
G Klassen über JMX per URLClassloader laden? Netzwerkprogrammierung 2
E Zwei PCs über das Internet miteinander verbinden? Netzwerkprogrammierung 3
E Socketverbindung über das Internet - Timeout? Netzwerkprogrammierung 28
M Socket Bilder über das Netzwerk übertragen Netzwerkprogrammierung 4
E Java über Socket ins Internet? Netzwerkprogrammierung 4
F Socket Daten über verschiedene IP's schicken Netzwerkprogrammierung 5
M Socket JavaProg über einen Clienten steuern Netzwerkprogrammierung 5
M Mail über Exchange versenden Netzwerkprogrammierung 13
F C/S über HTTPS Netzwerkprogrammierung 2
D ...class.getResourceAsStream("/meine.properties") funktioniert nicht über RMI? Netzwerkprogrammierung 3
M ganymed-ssh2.har: ftp-Verbindung über ftp-Proxy Netzwerkprogrammierung 2
J Probleme bei RSA mit byte[] bei Versand über RMI Netzwerkprogrammierung 2

Ähnliche Java Themen


Oben