c++ Server Kommunications Protokoll nach Python

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
kevv
User
Beiträge: 5
Registriert: Dienstag 11. März 2014, 01:13

Tach Jungs.
Kann jemand helfen folgenden c++ Code nach Python 2.7 zu Konvertieren !?
Die Funktion ist recht simpel,PAKET_INFO structure mit Daten füllen und versenden, danach Daten versenden.

Das Problem ist folgende Zeile.
#send( ConnectSocket, (char *)&pi, sizeof(pi), 0 ); #// c++

Wie setzt man das in Python um ??

Code: Alles auswählen

# *** c++ exampel ***

    typedef struct _PAKET_INFO {
        int Command;
        int Buffersize;
    } PAKET_INFO, *PPAKET_INFO;

    const int COMMAND_HANDSHAKE    = 0x646980;
    char *Paket = "test123";
    PAKET_INFO pi;
    pi.Command      = COMMAND_HANDSHAKE;
    pi.Buffersize   = strlen(Paket);

    send( ConnectSocket, (char *)&pi, sizeof(pi), 0 );
    send( ConnectSocket, Paket, pi.Buffersize, 0 );

Code: Alles auswählen


# Python 2.7
class PAKET_INFO(Structure):
    _fields_ = [
    ("Command",  DWORD),
    ("Buffersize",     DWORD)]

COMMAND_HANDSHAKE    = 0x646980;
Paket = "test123"
si = PAKET_INFO()
si.Command = COMMAND_HANDSHAKE    
si.Buffersize = len(Paket)


#send( ConnectSocket, (char *)&pi, sizeof(pi), 0 ); #//  c++
Socket.send(???) '# ???

#send( ConnectSocket, Paket, pi.Buffersize, 0 ); #//  c++
Socket.send(Paket)

Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@kevv: mit struct gehts einfacher:

Code: Alles auswählen

import struct

COMMAND_HANDSHAKE    = 0x646980;
paket = "test123"
socket.sendall(struct.pack("<ii", COMMAND_HANDSHAKE, len(paket)) + paket)
kevv
User
Beiträge: 5
Registriert: Dienstag 11. März 2014, 01:13

Super! Das Versenden klappt schon mall.

Die Server Antworten kommen auf dieselbe Weise zurück.
Kannst du mir noch ein kleines Beispiel geben wie Mann die am besten einlesen kann !?
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Lesen geht fast gleich:

Code: Alles auswählen

reader = socket.makefile('rb')
command, length = struct.unpack("<ii", reader.read(8))
paket = reader.read(length)
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Eventuell ist Construct etwas für dich.
the more they change the more they stay the same
Antworten