Wysyłanie pliku[C#/WinForm] - monitorowanie ilości wysłanych danych

0

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

1

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

0

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

1

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1