Ausgabe
Ich versuche, die Latenz vom Host für eine ziemlich gute Zeit zu bekommen, und ich stecke fest. Ich habe es bereits mit Simple Ping versucht
, aber es scheint, dass es die Latenz nicht zurückgibt. Das, was ich am nächsten getan habe, war, als ich den TKC-PingTest für MAC OS verwendet habe. Das funktioniert perfekt, aber nur im iPhone-Simulator, weil ich bei der Verwendung des iPhones eine Fehlermeldung bekomme, weil der Patch “/sbin/ping” von TKC verwendet wird. Außer diesen beiden habe ich schon viele andere ausprobiert und nichts bekommen.
Lösung
Sie können den einfachen Ping einfach erweitern, um die Latenz zu berechnen. Simpleping.h definiert das SimplePingDelegate-Protokoll. Es gibt zwei interessante Methoden – didSendPacket
und didReceivePingResponsePacket
. Eine naive Implementierung zum Timing der Latenz wäre
@property (strong,nonatomic) NSDate *start;
- (void)simplePing:(SimplePing *)pinger didSendPacket:(NSData *)packet
{
self.start=[NSDate date];
}
- (void)simplePing:(SimplePing *)pinger didReceivePingResponsePacket:(NSData *)packet
{
NSDate *end=[NSDate date];
double latency = [end timeIntervalSinceDate:self.start]*1000.0;
//TODO - Do something with latency
}
Ich sage, dass dies eine naive Implementierung ist, weil sie sich nicht mit dem Fall befasst, in dem ein anderes Paket gesendet wird, bevor die Antwort empfangen wird, oder in dem Pakete verworfen werden. Um damit umzugehen, müssten Sie die Paketdaten untersuchen, um festzustellen, ob die Sequenznummer zwischen den Sende- und Empfangsereignissen konsistent war.
Beantwortet von – Paulw11
Antwort geprüft von – David Goodson (FixError Volunteer)