2012-02-29 37 views
8

Tôi biết với khả năng truy cập, bạn có thể kiểm tra xem bạn có được kết nối với Internet hay không. Nhưng có cách nào để xác định tốc độ của kết nối đó không? Tôi đang cố gắng tính toán tốc độ tải lên cũng như tốc độ tải xuống riêng biệt.Xác định tốc độ trên internet theo lập trình

Cách xác định tốc độ trên internet theo lập trình?

+2

Nó không trả lời câu hỏi của bạn, nhưng như một sang một bên, trong tâm trí tôi một ứng dụng nên có thể hỗ trợ bất cứ tốc độ có sẵn trong thực tế, như mọi người kết nối cùng một thiết bị với nhiều nguồn internet (WiFi ở nhà hoặc nơi làm việc, 3G ra và về); và thậm chí với một tốc độ nguồn duy nhất trong thực tế có thể thay đổi nhanh chóng. –

+0

Bây giờ có thể đo tốc độ internet hoặc độ mạnh của wifi không. – Imran

Trả lời

4

Nếu bạn sử dụng NSURLConnection để lấy tệp lớn (ví dụ: 1 MB hoặc lớn hơn), bạn có thể sử dụng delegate để theo dõi tiến trình tải xuống trung gian.

Cụ thể: Nếu bạn đo sự khác biệt về số byte đã tải xuống và sự chênh lệch về thời gian giữa các cuộc gọi với đại biểu, bạn có thể tính toán tốc độ liên tục tính theo byte trên giây (hoặc đơn vị thời gian khác).

+2

NB: Nếu ứng dụng của bạn cố gắng tải xuống> 1MB trên kết nối 3G của tôi, chỉ để xác định rằng đó là * slooooow *, tôi sẽ không hài lòng (tuy nhiên, nhà cung cấp dịch vụ của tôi có thể). Trong thực tế, tôi sẽ rất bất hạnh khi bạn đang ăn uống vô hạn với giới hạn dữ liệu ít ỏi của tôi; thậm chí nhiều hơn nếu bạn làm điều đó nhiều lần. (Nếu bạn đang đo (các) truyền dữ liệu mà ứng dụng thực sự cần - sẽ mất một lúc, nhưng tôi sẽ quản lý) – Piskvor

+1

Ồ, chắc chắn. Nhưng điều này có thể cung cấp tốc độ tải xuống bình thường đang diễn ra trong quá trình ứng dụng thực hiện công việc kinh doanh thông thường của nó. Hoặc nếu ứng dụng là một ứng dụng thử nghiệm mạng, thì người dùng cuối sẽ chạy điều này khi biết rằng nó sẽ yêu cầu một tệp lớn qua kết nối mạng. Vì vậy, tôi cho rằng nó vẫn là một cách tiếp cận hữu ích ngay cả đối với các kết nối di động, nếu được sử dụng một cách thông minh và phù hợp ... –

+0

Chắc chắn nhất. – Piskvor

2

bước 1: Lấy url tệp có thể tải xuống và định cấu hình nó bằng NSURLSession và phương pháp dataTaskWithUrl.

bước 2: Tích hợp phương thức NSURLSessionDelegate, NSURLSessionDataDelegate trong bộ điều khiển của bạn.

bước 3: Hãy hai CFAbsoluteTime biến mà lưu trữ Startime và gán CFAbsoluteTimeGetCurrent() và thứ hai một stopTime trong didReceiveData: phương pháp đại biểu.

bước 4: Đếm tốc độ như thế này

CFAbsoluteTime elapsedTime = stopTime - startTime; 
    float speedOfConnection = elapsedTime != 0 ? [data length]/(stopTime - startTime)/1024.0/1024.0 : -1; 
+0

Hướng dẫn rõ ràng, cảm ơn bạn! – ArtStyle

Các vấn đề liên quan