2016-02-21 13 views
7

Tôi đang cố gắng phát triển một ứng dụng Android để đo tốc độ tải lên và tải xuống mạng của mình, có thể tôi sẽ cần chạy và cấu hình nó sau mỗi 2 giây. Ứng dụng SpeedTest.net là một ứng dụng lý tưởng hoạt động tương tự, tuy nhiên, nó không phải là nguồn mở. Hơn nữa, tôi sẽ cần nó được chạy mỗi 2 giây. Phải mất vài giây để hoàn thành kiểm tra.Tải lên và tải xuống hồ sơ tỷ lệ trong Android

Tôi có thể làm như thế nào? Hiện tại tôi chỉ tải xuống một tệp .txt ngẫu nhiên nhỏ được tìm thấy ở đâu đó trên Internet và đo lường size/time-to-download làm thước đo tốc độ tải xuống. Nhưng tôi nhận được kết quả kỳ lạ mỗi lần. Rõ ràng cách tiếp cận này không hoạt động.

CẬP NHẬT: quá trình tải xuống hoàn tất. Bất kỳ lời khuyên nào về cách triển khai tốc độ tải lên?

Trả lời

8

Bạn cần tải xuống một tệp lớn đáng kể, thứ cần ít nhất 15 giây để tải xuống. Tệp càng lớn, kết quả tốt hơn bạn sẽ nhận được. Sử dụng máy chủ luôn bật có tính khả dụng cao. Ngoài ra, sử dụng tích lũy vào thời gian trong mạng của bạn chỉ gọi (Tôi tin rằng bạn phải sử dụng một số ổ cắm để đọc trong một vòng lặp while. Vì vậy, làm System.currentTimeMillis() trước và sau khi socket.read() và tiếp tục bổ sung chúng)

này là khá nhiều những gì SpeedTest.net cũng vậy

Khi tải lên có liên quan, bạn có thể làm tương tự. Mã giả thô:

upload (String remote, InputStream localfile){ 
    Socket s = openDataConnection(remote); 
    OutputStream os = new BufferedOutputStream (s.getOutputStream(), MAX_BUFFER_SIZE); 

    byte[] buffer = new byte[MAX_BUFFER_SIZE]; 
    long totalTime = 0L; 
    while((buffer = localfile.read())!= -1){ 
     long startTime = System.currentTimeMillis(); 
     os.write(buffer); 
     long endTime = System.currentTimeMillis(); 
     totalTime += (endTime - startTime); 
    } 
} 
5

Để tải lên, bạn cần thiết lập liên lạc hai chiều với máy chủ. Tôi sẽ làm điều đó với một vòng lặp đơn giản:

while(x){ 
Starttime =getCurrentTime() 
Sendfile() //Send a Xmb file that the server can verify 
waitForVerification() // Wait for a reply from server. 
compareCurrentTimeWithStartingTime() // compare the times. 
} 
Các vấn đề liên quan