Nur ein Python-Programm, das als Server für Unix-Sockets fungiert und wenn es eine Verbindung erhält, liest 4 Bytes davon.Unix-Sockets zwischen C und Python
Auf der anderen Seite habe ich ein C-Programm, das mit dem Server verbindet und sendet diese 4 Bytes an es.
file.py
packet = connection.recv(4, socket.MSG_WAITALL)
for value in packet:
if value == '\0':
print 'A none'
else:
print value
file.c
size_t toSend 84; // Char representation \0\0\0T
write(fd, (void *)&toSend, sizeof(toSend));
Dies macht das Python-Programm erhalten eine falsche Reihenfolge von Bytes. Hier ist der Ausgang
T
A none
A none
A none
Das erste, was mir in den Sinn kam, war, dass dies das Ergebnis von Endian, aber dann geändert ich die Dateien sie so zu verlassen.
file.c
char abc[16];
// setting char abc to be 'ABCDEFGHIJKLMNOP' (without ending \0)
write(fd, (void *)&abc[0], 16);
file.py
packet = connection.recv(16, socket.MSG_WAITALL)
// everything else, wasn't modified
Und das gedruckt:
A
B
C
...
P
Dieses Mal das sie empfangen wurde, wie es sollte. Könnte mich jemand darauf hinweisen, was ich falsch mache? Wenn es nichts mit dem Typ size_t
zu tun hat, kann ich an nichts anderes denken.
Danke!
Endianness ist nicht relevant für 'char's, und ich schlage vor, feste Größe zu verwenden, zB:' uint32_t' anstelle von 'size_t' –