Integer über Sockets übertragen!



  • Hi,

    warum kann ich über die socket_write funktionen nur Strings überliefern?
    Damit kann man doch nicht gescheit arbeiten? (PHP<->JAVA)

    Ist es nicht möglich zb. Integer oder sowas in der Art zu schicken?
    Alles über Strings zu machen ist einfach nur lästig!

    Oder bleibt mir nichts Anderes übrig?

    Ciao



  • JayJay schrieb:

    Hi,

    warum kann ich über die socket_write funktionen nur Strings überliefern?
    Damit kann man doch nicht gescheit arbeiten? (PHP<->JAVA)

    Ist es nicht möglich zb. Integer oder sowas in der Art zu schicken?
    Alles über Strings zu machen ist einfach nur lästig!

    Oder bleibt mir nichts Anderes übrig?

    Ciao

    du schreibst ja nicht strings, sondern ein Array aus char. Das hat den Grund, dass ein char genau 1 Byte gross ist, und man damit also binaere Daten sehr gut uebertragen kann. Das einzige Problem, das du dabei evtl. haben koenntest ist, dass nicht alle Computer das gleiche Byte-Format haben. Speziell Macs unterscheiden sich dabei von Windows. Aber solange du nur Daten von Windows-Rechner zu Windows-Rechner schickst, sollte das kein Problem sein.

    Du kannst einen Integer z. B. so in ein Byte-Array umwandeln:

    int myInt = 42;
    int* pInt = &myInt;
    byte byteArray[4];
    byteArray = pInt;
    
    // in byteArray[0] bis byteArray[3] stehen jetzt die 4 Bytes, die Zusammen einen Integer ausmachen
    

    Der Rueckweg geht aehnlich 🙂



  • hier gehts um php...



  • dann sag das doch ganz klar.... ein "PHP<->JAVA" ist da etwas irrefuehrend 😉

    Aber egal:
    fuer PHP kannst du dir mal die stream_socket_*() Funktionen sowie fsockopen() anschauen. Damit erhaelst du Objekte, mit denen du so aehnlich umgehen kannst wie mit lokalen Dateien. Damit kannst du zwar im Grunde auch nur Strings schreiben, aber vielleicht ist dir die Methode ja lieber.

    Was Java angeht: da kannst du ja nicht nur Strings verschicken, sondern einfach alles, was in einen OutputStream reinpasst. Sogar serialisierte Objekte 🙂



  • Ja, leider kann ich serialisierte objekte nicht in PHP "entserisieren",
    PHP müsste sich mal etwas an den größeren Programmiersprachen wie C++/Java orientieren und etwas penibler mit den Datentypen umgehen.
    Naja das jetzt mal am Rande.

    Ich werd mir das ganze mal anschauen. Erstmal Vielen DanK!



  • so, jetzt steht ich faktisch vor dem problem, wenn ich von der nicht php seite einen Byte Stream losschicke (zb. ein integer), hab ich einfach keine gescheite möglichkeit, diesen mir auf der phpseite in mein gewünschtes format zu convertieren.

    das Einzige was ich vielleicht noch machen könnte wäre eine eig. dll zu schreiben. welche dann über C++ läuft.

    Oder kenn ich vielleicht noch andere möglichkeiten?



  • wenn es jemanden interessiert, habe eine stabile Form der Übertragung hinbekommen:

    //-------------------------------------------------------
    // Purpose:
    //-------------------------------------------------------
    function wb_integer($integer)
    {
    	return	chr(($integer & 0xff000000) >> 24). 	// write byte[1]
    			chr(($integer & 0x00ff0000) >> 16).		// write byte[2]
    			chr(($integer & 0x0000ff00) >> 8).		// write byte[3]
    			chr(($integer & 0x000000ff));			// write byte[4]
    }
    
    //-------------------------------------------------------
    // Purpose:
    //-------------------------------------------------------
    function rb_integer($int_bytes)
    {
    	return	ord($int_bytes[3]) | ord($int_bytes[2]) << 8 | ord($int_bytes[1]) << 16 | ord($int_bytes[0]) << 24;			// write byte[4]
    }
    

    der zurückgegebene wert ist ein String und kann in den output der socketverbindung geschrieben werden mit der länge sizeof($str)



  • wtf...


Anmelden zum Antworten