Ich muss eine Kurz- und Ganzzahl am Anfang einer Nachricht setzen, die ich an einen Java-Server sende. Der Server erwartet eine kurze (Nachrichten-ID) und dann eine Ganzzahl (Nachrichtenlänge). Ich habe im Stackoverflow gelesen, dass NSMutableData java ByteBuffer ähnlich ist.Objective-C Packdaten mit NSMutableData?
Ich versuche, die Nachricht in NSMutableData zu packen und dann zu senden.
Also das ist was ich habe aber nicht funktioniert!.
NSMutableData *data = [NSMutableData dataWithLength:(sizeof(short) + sizeof(int))];
short msg_id = 2;
int length = 198;
[data appendBytes:&msg_id length:sizeof(short)];
[data appendBytes:&length length:sizeof(int)];
send(sock, data, 6, 0);
Der Server verwendet Java ByteBuffer, um die empfangenen Daten einzulesen. So kommen die Bytes in ist:
32,120,31,0,2,0
, die ungültig ist.
Der richtige Wert, so dass die ByteBuffer können sie als .getShort() und .getInt lesen()
0,2,0,0,0,-66
+1, aber ich glaube nicht, dass er die Daten richtig in das NSData-Objekt richtig einfügt, weil er 'dataWithLength:' statt 'dataWithCapacity:' verwendet. – dreamlax
Vielen Dank und Danke an dreamlax. Ich habe [Datenbytes] und die DataWithCapacity verwendet. Ich bekomme tatsächlich die Bytes auf der Serverseite als 2,0, -58,0,0,0. Die Bytes sind in umgekehrter Reihenfolge. Wie kann ich das beheben, bevor ich es sende? Ich will meinen Server nicht ändern, es funktioniert gut mit anderen Java CSCI. jede Empfehlung – Unis
Danke nochmal ich habe HTONS (msg_id) und HTONL (Länge) benutzt. Die Bytes kommen in der richtigen Reihenfolge. – Unis