ftp 다운로드 중에 실제 전송 속도를 측정하려고합니다. 다운로드 자체가 작동하고 스트림이 실행 루프에 연결됩니다. 측정은 이벤트 시작시 CFTimeGetCurrent를 사용하여 NSStreamEventHasBytesAvailable에서 수행되고 데이터가 파일에 기록 된 후 경과 시간이 (double) previousTimestamp-CFAbsoluteTimeGetCurrent와 함께 계산되지만, 내가 얻은 시간은 절대적으로 무리합니다. 시뮬레이터와 장치에 대한 테스트를 통해 누구나 나를 계몽 할 수 있습니까?정확하게 NSInputStream 데이터 속도를 측정하는 방법
코드 :
switch (eventCode) {
case NSStreamEventOpenCompleted: {
} break;
case NSStreamEventHasBytesAvailable: {
if ([[self.fileStream propertyForKey:NSStreamFileCurrentOffsetKey] intValue]==0) {
previousTimestamp = CFAbsoluteTimeGetCurrent();
}
NSInteger bytesRead;
uint8_t buffer[32768];
bytesRead = [self.networkStream read:buffer maxLength:sizeof(buffer)];
if (bytesRead == -1)
{
[self _stopReceiveWithStatus:@"Err"];
}
else if (bytesRead == 0)
{
[self _stopReceiveWithStatus:nil];
}
else
{
[self completition:bytesRead];
NSInteger bytesWritten;
NSInteger bytesWrittenSoFar;
// Write to the file.
bytesWrittenSoFar = 0;
do {
bytesWritten = [self.fileStream write:&buffer[bytesWrittenSoFar] maxLength:bytesRead - bytesWrittenSoFar];
assert(bytesWritten != 0);
if (bytesWritten == -1) {
[self _stopReceiveWithStatus:@"File err"];
break;
} else {
bytesWrittenSoFar += bytesWritten;
}
} while (bytesWrittenSoFar != bytesRead);
[self downloadSpeedSave:bytesRead :previousTimestamp-CFAbsoluteTimeGetCurrent()];
previousTimestamp = CFAbsoluteTimeGetCurrent();
"하지만 내가 할 시간이 절대적으로 부당"에 대한 또 다른 좋은 링크 - 만약 당신이 어떤 값을받을 수 있나요? 너는 무엇을 기대 했는가? 왜? –
글쎄, 내 목표는 KB/s로 전송 속도를 계산하는 것입니다. 그래서 bytesRead를 경과 시간과 1024로 나누면 (KB를 얻으려면) 결과가 300000KB/s와 같이 너무 커서 인터넷 연결에는 불가능합니다. – MartyRed
그래서 "경과 시간"에는 어떤 단위가 있습니까? 초입니까? 밀리 초? –