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:¤tTimeStamp 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]);