Ankündigung

Einklappen
Keine Ankündigung bisher.

Frage Datenformat socket_write

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Frage Datenformat socket_write

    Gerne würde ich mit PHP an einem C# Socket Server Daten mit Socket_write senden. Das Problem scheint zu sein die Daten im richtigen Format zu senden. (Server erkennt keinen Login Request type = 4)

    C# Client Code Beispiel
    // type = 4
    private void SendPacket(ServerPackets type, byte[] data)
    {
    var stream = new MemoryStream();
    var writer = new BinaryWriter(stream);
    writer.Write((byte)type);
    writer.Write((short)(data.Length));
    writer.Write(data);
    lock(m_sendQueue)
    m_sendQueue.Enqueue(stream.ToArray());
    }
    public enum ServerPackets
    {
    Login = 4,
    }

    Datenstruktur data
    PHP-Code:
    $array = array(  
                
    "Username"=>"Test",
                
    "Password"=>"test",
                
    "UID"=>"test",
                
    "Version"=>"199970"
                
    );
    $json_data json_encode($array); 
    // Mein socketWrite Code
    PHP-Code:
    $type 4;
    socket_write($this->socket,$type,strlen($type));
    socket_write($this->socket$json_datastrlen($json_data)); 


  • #2
    Was hat denn der C# mit deinem php Schnippsel am Hut? Im C# Teil werden Binärdaten geschrieben, per php nutzt du JSON mit der Länge davor. Da liegen Welten zwischen. Du musst deine Daten per pack() in Binärdaten umwandeln.

    http://php.net/manual/en/function.pack.php

    PHP-Code:
    socket_write($this->socketpack('c'$type), 1);
    socket_write($this->socketpack('S'strlen($json_data)), 2);
    socket_write($this->socket$json_datastrlen($json_data)); 
    Auf die Schnelle und ungetestet, es kann auch noch auf die byteorder ankommen.

    Kommentar


    • #3
      Danke das hilft erstmal weiter und ich bekomme einen Response. Jetzt kommt gleich die nächste Frage auf. Wie nun die Daten unpacken welche über socket_recv empfangen werden.

      Edit: gefunden, $data = unpack("cchars", $bytes);
      print_r($data);

      Kommentar

      Lädt...
      X