Socketverbindung



  • kleine Frage an euch.

    ich nehme über än textarea ein string auf und möchte diesen dann an meinen server schicken wie mach ich das???

    wenn ich einen Integer senden möchte, das weiss ich wie es geht, aber mit einem String häng ich fest :S

    könnte mir einer erklären wie das geht, please

    greez

    roger



  • Objektserialisierung ist fast immer das einfachste. Mit nem ObjectOutputStream writeUnshared(Object) aufrufen und nen String übergeben.



  • Ich würde mir einfach aus dem Socket den OutputStream holen und dann daraus nen PrintStream basteln. Mit dem kannst du dann bequem alle Datentypen senden:
    http://java.sun.com/j2se/1.4.2/docs/api/java/io/PrintStream.html



  • Senden ja, auslesen nein. Der PrintStream nimmt das plattformspezifische Encoding und macht aus dem String ein byte[]. Selbst wenn du fürs codieren und decodieren explizit das selbe Encoding verwendest und auch noch ein Encoding nimmst, was Unicode-Zeichen fressen kann, hast du es unnötig umständlich:

    String -> ... encode ... -> byte[] => senden => empfangen -> byte[] -> ... decode ... -> String
    musst du manuell durchführen.

    Und weniger flexibel. Jetzt kriegste zwar schon Strings hin, aber wenn du irgendne Zahlenfolge kriegst, weißt du gar net, ob das jetzt ein Zahlenstring, ein int oder ein long sein soll. Und Foo-Objekte kannst du auch nicht senden, außer du denkst dir dazu ein schlaues System aus. Ist aber unnötig, denn dieses schlaue System gibt es schon.

    Du kannst einfach nen ObjectOutputStream erstellen mit

    ostream = new ObjectOutputStream(socket.getOutputStream);
    

    Und dort brauchst nur noch die Objekte beliebig reinzuschreiben.

    ostream.writeUnshared(myString);
    ostream.writeInt(myInt);
    


  • Er wollte nur einen String senden, und für sowas reicht z.B. PrintStream völlig aus. Da die Netzserialisierung IIRC über RMI läuft, kommt ansonsten noch ein schöner Overhead hinzu.



  • Er wollte nur einen String senden, und für sowas reicht z.B. PrintStream völlig aus.

    Ein PrintStream ist zur formatierten Ausgabe. Wenn er nen String haben will, muss er ihn so formatiert ausgeben und wieder formatiert einlesen. Das ist unnötige Arbeit, fehlerträchtiger, weniger typsicher und kein Stück performanter als serialisieren.

    a die Netzserialisierung IIRC über RMI läuft, kommt ansonsten noch ein schöner Overhead hinzu.

    Nein, mit RMI hat das nichts zu tun.



  • Optimizer schrieb:

    Nein, mit RMI hat das nichts zu tun.

    hm, stimmt. Würde auch wenig Sinn machen. Hab das mit EJB verwechselt 😞


Anmelden zum Antworten