Witam. Napisałem program do wysyłania/odbierania plików przez TCP/IP, co działa tak jak powinno. Chciałbym jednak móc monitorować ile pliku już "się wysłało i odebrało", aby wykorzystać to do zrobienia progressbar'u(paska postępu?), ale nie mam pojęcia jak się za to zabrać. Znalazłem ze dwa artykuły (m.in. o pasku postępu), ale nic nie zrozumiałem. Mógłby ktoś mi powiedzieć co i jak trzeba zrobić? Z góry dzięki. Tu kod projektu http://ideone.com/IcIicz
- Rejestracja:prawie 12 lat
- Ostatnio:około 2 miesiące
- Postów:308
zrób jakiś bufor i zapisuj strumień w pętli, w tym czasie uruchom timer (interval 1 sekunda) i obliczaj ile się wysłało. na podstawie tego możesz obliczyć prędkość, czas do końca, postęp
- Rejestracja:prawie 11 lat
- Ostatnio:ponad 4 lata
- Postów:37
Dobra. Rozwiązałem problem tak, że zamiast wysyłania całej tablicy jedną funkcją, wysyłam bajty pojedynczo. Oprócz tego wysyłam także rozmiar tablicy bajtów, aby serwer (który odbiera plik), wiedział ile razy ma powtórzyć pętle pobierającą bajt. Pasek postępu działa pięknie, kłopot z za dużymi plikami znikł, ale prędkość przesyłania jest mała. Plik ok 3,05 MB wysyła około 30 - 60 s. I moje pytanie brzmi: czy winny jest temu algorytm (komputer wolno wykonuje pętle?), czy po prostu tak musi być? Link do programu http://ideone.com/p2T9vs

- Rejestracja:ponad 21 lat
- Ostatnio:około 5 godzin
maksymalny rozmiar paczki IP to 64 kB. to znacznie więcej niż typowy rozmiar paczki Ethernetowej (około 1500 B, większe to tzw. jumbo frame i nie każdy sprzęt to obsługuje).
Wynika z tego że paczka większa niż ten (upraszczając) 1 kB i tak jest automatycznie dzielona i łączona.
Rozwiązałem problem tak, że zamiast wysyłania całej tablicy jedną funkcją, wysyłam bajty pojedynczo
Nie, aż tak to nie musisz - wysyłaj po jednym kilobajcie (1024 B) na raz.
Teraz tracisz na prędkości bo narzut jest znacznie większy niż dane.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.