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

Wysyłanie pliku[C#/WinForm] - monitorowanie ilości wysłanych danych
P1
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 4 lata
  • Postów:37
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

AL
  • Rejestracja:ponad 11 lat
  • Ostatnio:około miesiąc
  • Postów:308
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

P1
Dzięki, ale mów do mnie raczej jak do zielonego. O ile wiem bufor to pewna przestrzeń w pamięci? Czyli mam stworzyć jakąś klasę? poza tym jak zapisać strumień w pętli? W między czasie znalazłem jeszcze jeden problem: jeżeli wysyłam pliki większe niż 64 kB, to program po prostu je ucina. Wiesz co z tym zrobić?
P1
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 4 lata
  • Postów:37
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

Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:3 minuty
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.

edytowany 2x, ostatnio: Azarien
P1
Dzięki za wyczerpującą odpowiedź. Ale mam jeszcze jedno pytanie: napisałem już funkcje na wysyłanie kB na raz, ale funkcja odbiera nadal po jednym bajcie. Prędkość jest zadowalająca (50 mB wysyła się dużo szybciej niż wcześniej 3 mB), ale czy zamiast odbierać po bajcie, będę odbierać tablicę, to coś przyśpieszę? Chyba to nie ma znaczenia, bo tak czy inaczej wysyłam bajty po kolei? Prosilbym, aby mnie poprawić, jeśli moje rozumowanie jest błędne.
Azarien
przerób odbieranie też...
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)