Unterschiedliches Ergebnis für [NSDate date] in mehreren Geräten

Zu Beginn muss ich sagen, dass ich die Autoset-Funktion in den Einstellungen für Datum und Uhrzeit festgelegt habe und die Zeitzone für jedes Gerät gleich ist. Also benutze ich[NSDate date] um den Zeitstempel in Millisekunden zu erhalten, kodiere dann nachNSData und an ein anderes Gerät senden. Am Empfänger werden Daten dekodiert und mit new subtrahiert[NSDate date]. Damit ich die Gesamtzeit bekomme, die zum Senden und Empfangen von Nachrichten benötigt wird. Das dachte ich mir, denn wenn der Absender iPhone 4 iOS6 und der Empfänger iPhone 5 iOS7 ist, hat der Empfänger einen früheren Zeitstempel als der Absender. Ich weiß nicht warum? Könnte sein[NSData date] Ist das nicht die zuverlässigste Klasse für diese Art von Operationen? ich benutzeGCDAsyncUdpSocket zum Senden / Empfangen von UDP.

Code Absender

NSData *data2 = [self createRandomNSData:8192];
NSMutableData *dataToSend =[NSMutableData data];
[dataToSend appendBytes:&tag length:sizeof(int)];
long long currentTimeStamp = (long long)([[NSDate date] timeIntervalSince1970]*1000.0);
[dataToSend appendBytes:&currentTimeStamp length:sizeof(long long)];
[dataToSend appendData:data2];
NSLog(@"%i || %lld || %lu",tag, currentTimeStamp,(unsigned long)[dataToSend length]);
[_udpSocket sendData:dataToSend toHost:@"230.0.0.1" port:_port withTimeout:-1 tag:tag];
tag++;

Code Empfänger

char* dataBytes = [data bytes];
int inTag;
long long inCurrentTimeStamp;
[data getBytes:&inTag length:sizeof(int)];
[data getBytes:&inCurrentTimeStamp range:NSMakeRange(sizeof(int), sizeof(long long))];
long long currentTimeStamp = (long long)([[NSDate date] timeIntervalSince1970]*1000.0);
long long timeStampDiff = currentTimeStamp - inCurrentTimeStamp;
self.delay = timeStampDiff;
NSLog(@"%i || %lld || %lu",inTag, timeStampDiff,(unsigned long)[data length]);

Antworten auf die Frage(4)

Ihre Antwort auf die Frage