kleine Frage zu Netzwerken

NiceOldLady

Grünschnabel
ich hab mal eine kleine frage, ich hoffe jemand kann mir helfen.
ich soll für die uni im softwarepraktikum eine segelregatter programmieren. meine aufgabe im team ist das programmieren des netzwerkes...

die frage die ich jetzt habe ist... muss ich die daten (bestehen aus strings int short und so weiter) in ein byte array umrechnen irgendwie, oder kann ich direkt ein objekt der klasse verschicken und wenn ja wie?

vielen dank im vorraus!!
 
Servus!
Das Stichwort hier lautet serialisieren. Dazu muss das zuversendetet Objekt die Schnittstelle Serializable implementieren.
Dann kannst du dein Objekt einfach so versenden:
PHP:
Object yourData;
OutputStream outputstream = socket.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream( outputstream );
oos.writeObject(yourData);
 oos.flush();


*grüssle*
MeinerEiner
 
gaaaaaaaaanz doll dnake für deine schnelle antwort!
ich sehe ma zu das ich das gebacken kriege.
ansonsten melde ich mich nächste woche nochmal^^

mfg
 
also ich habe mir das ganze so jetzt gedacht:
ich wollte ma fragen ob das so funktionieren könnte, da ich davon ja null ahnung habe =)
also es soll halt für die uni nen spiel werden wo ich die daten hin und her schicken muss, ich denke mal das die beschreibung alles eindeutig sein sollte =)

PHP:
public class Netzwerk {
    private static final int port = 1337;
    private static OutputStream out;
    private static Socket clientSocket;
    private static ObjectOutputStream oos;
    
    /**
     *Diese Methode dient dazu, die aktuellen Spieldaten
     *vom Server an alle Clients zu senden.
     *@param spd: ein Array wo, von jedem Spieler, Position usw enthalten ist
     *@param cIP: ein Array wo alle Client-IPs gespeichert sind, 
     *in richtiger Reihenfolge nach spd
     */
    public static void sendeDaten(SpielDaten[] spd, String[] cIP) {
        try {
            for (int i = 0; i < 10 ; i++) {
                if(cIP[i] != null) {
                    clientSocket = new Socket(cIP[i],port);
                    Object yourData = (Object)spd[i];
                    out = clientSocket.getOutputStream();
                    oos = new ObjectOutputStream(out);
                    oos.writeObject(yourData);
                    oos.flush();
                }
            }
        }catch (Exception e) {
            JOptionPane.showMessageDialog(null,"ServerSendError",
                        "",JOptionPane.ERROR_MESSAGE);
        }
    }
    
    
    /**
     *Diese Methode dient dazu, die gedrückten Tasten von einem beliebigen
     *Client an den Server zu schicken.
     *@param gt: Das Byte, in dem die gedrückten Tasten codiert sind.
     @param sIP: die Server IP
     */
    public static void sendeDaten(byte gt, String sIP) {
        try {
            clientSocket = new Socket (sIP,port);
            OutputStream out = clientSocket.getOutputStream();
            out.write(gt);  
        }catch(Exception e) {
            JOptionPane.showMessageDialog(null,"ClientSendError",
                        "",JOptionPane.ERROR_MESSAGE);
        }
    }
    
    
    /**
     *Diese Methode dient dazu, einmalig vor Spielbeginn, alle Daten
     *der Spieler (Name, ID usw) an alle Clients zu schicken.
     *@param sd: Ein Array, in dem die Spielerdaten eines jedem Spielers gesp. sind
     *@param cIP: in Array wo alle Client-IPs gespeichert sind, 
     *in richtiger Reihenfolge nach sd
     */
    public static void sendeDaten(SpielerDaten[] srd, String[] cIP) {
        try {
            for (int i = 0; i < 10 ; i++) {
                if(cIP[i] != null) {
                    clientSocket = new Socket(cIP[i],port);
                    Object yourData = (Object)srd[i];
                    out = clientSocket.getOutputStream();
                    oos = new ObjectOutputStream(out);
                    oos.writeObject(yourData);
                    oos.flush();
                }
            }
        }catch (Exception e) {
            JOptionPane.showMessageDialog(null,"ServerSendError",
                        "",JOptionPane.ERROR_MESSAGE);
        }
    }
}
 
Servus!
Also was da sicherlich fehlt, ist die Serverseite, also ein ServerSocket, der eingehende Verbindungen annimmt. Wenn du das gebastelt hast, kannst du ja auch selbst testen, ob das klappt. Da müssen die Daten dann auch wieder Deserialisiert werden
Desweiteren öffnest und schliesst du für jeden Methodenaufruf ein Haufen Verbindungen
( je nach Spieleranzahl). Da ihr sicherlich öfters Daten versendet, gilt es vielleicht zu übelegen, ob du, statt jedesmal neue Verbindungen zu erstellen, die Verbindungen irgendwie verwaltest.

*grüssle*
MeinerEiner
 
Servus,

die Sache mit dem Serialisieren und Deserialisieren ist wunderbar, funktioniert aber nur, wenn man sicher stellen kann, dass beide Seiten (Client, Server) Java verstehen. Falls Server und Client in unterschiedlichen Sprachen realisiert sind, bleibt einem nichts anderes übrig, die Daten in einem Format/Protokoll zu verschicken, das beide Seiten verstehen.

Desweiteren öffnest und schliesst du für jeden Methodenaufruf ein Haufen Verbindungen
( je nach Spieleranzahl). Da ihr sicherlich öfters Daten versendet, gilt es vielleicht zu übelegen, ob du, statt jedesmal neue Verbindungen zu erstellen, die Verbindungen irgendwie verwaltest

Eine Möglichkeit zur Verwaltung der Verbindungen wäre evtl. folgende:
Die Verbindungen in einem eigenen Thread zu verarbeiten, wobei diese von einem ThreadPool zur Verfügung gestellt werden.



mfg
gello
 
Zurück