Inny wynik dla [daty NSDate] w kilku urządzeniach
Na początek muszę powiedzieć, że ustawiłem autoset w ustawieniach daty i godziny, a strefa czasowa jest taka sama dla każdego urządzenia. Więc używam[NSDate date]
uzyskać znacznik czasu w milisekundach, a następnie zakodować doNSData
i wyślij do innego urządzenia. Dane odbiornika są dekodowane i odejmowane nowymi[NSDate date]
. Aby uzyskać całkowity czas potrzebny na wysłanie i odebranie wiadomości. Pomyślałem, że ponieważ nadawca to iPhone 4 iOS6, a odbiornik to iPhone 5 iOS7, odbiornik ma wcześniejszy znacznik czasu niż nadawca. Nie wiem dlaczego? Może[NSData date]
nie jest najbardziej niezawodną klasą dla tego rodzaju operacji? używamGCDAsyncUdpSocket
do wysyłania / odbierania UDP.
Nadawca kodu
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++;
Odbiornik kodu
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]);