screenshot i sieć

0

Zrobiłem aplikację która robi na jednym komputerze screenshota wysyła go na drugi a ten go pokazuje..w sumie wychodzi tak ze druga osoba ogląda pokaz slajdów ze screenshotów z pierwszego komputera...gdy włączę aplikację na jednym komputerze przez ip 127.0.0.1 aplikacja działa super..gdy włączę na dwóch kompach to zaczynają wyskakiwać błędy typu jpeg error #42 i #56 raz na jakiś czas pojawi się też Error file 103...myślałem ze jak będzie działając na 127.0.01 to wszędzie tez powinien

ps.Firewalla mam wyłączonego

0

Być może z komunikacją coś jest nie tak - na przykład opóźnienia powodują, że odebranie całego obrazka na raz - co jest możliwe przy użyciu IP 127.0.0.1 - zdarza się tylko sporadycznie i powinieneś na resztę poczekać.

0

na 99% próbujesz wyświetlić nie do końca przesłanego jpga. Wysyłaj najpierw jego rozmiar i potem czekaj aż cały jpg zostanie przesłany

0

jpeg jest wysyłany pakietami o wielkości 1024bajtów ...próbowałem z tymi odstępami od wysyłanych pakietów bo się skumałem ze są one odbierane jakby to leciało jednym ciurkiem a nie osobnymi pakietami..pomogło dopiero gdy ustawiłem sleep na 200....żenada... ale następny obrazek już się rąbie..popróbuje z tymi rozmiarami ale ...nie ma jakiegoś lepszego rozwiązania bo przesył obrazka trwa niesamowicie długo.ok 10 s.(nie jak w wcześniej odświeża się co 2 s.)

0

wieksza kompresja. a sleep to beznadziejne rozwiazanie, bo jak predkosc lacza bedzie mniejsza to przestanie dzialac.

0

kompresję starałem się wziąć jak największą ale żeby można jeszcze odczytać napisy..jeśli nie sleep to co..

0

ale jaki sleep?? W ogóle to po co Ci on gdziekolwiek? Wysłasz rozmiar obrazka, potem obrazek i wyświetlasz go dopiero jak odbierzesz całość. Żaden sleep

0

Dokładnie, jak pisze Misiekd. Żadnych sleepów - wysyłasz powiedzmy 4 bajty (DWORD): rozmiar obrazka, a następnie dokładnie tyle bajtów obrazka, ile wynosi wysłana na początku liczba czterobajtowa. Za tym możesz od razu słać kolejny obrazek.

Przy odbieraniu czytasz 4 bajty i potem robisz odczyt tylu bajtów ile podano na początku. Wyświetlasz obrazek i w następnym odczycie znów zaczynasz od czytania 4 bajtów.

0

eee...jak wysłać obrazek w całości...(ja dzieliłem to na na 1kb..i wysyłałem po 1 kb [jeden buf] i miedzy kazdym kb musiałem robić odstęp czyli sleep)

0

nie wiem czego używasz do wysyłania ale to jakaś pomyłka. Pobaw się Synapse - przy jego pomocy zrobiłem sobie moduł do wysyłania emaili i spokojnie śle maile po kilka MB. Nie interesuje mnie żadne dzielenie na bloki, czy coś takiego - podaję mu cały plik a on już sam sobie to dzieli i wysyła. Poniżej masz kawałek kodu - może to Ci rozjaśni sprawę

function TSMTPSend.MailData(const Value: TStrings): Boolean;
var
  n: Integer;
  s: string;
  t: string;
  x: integer;
begin
  Result := False;
  t := '';
  x := 1500; //"ozmiar" pakietu
  for n := 0 to Value.Count - 1 do
  begin
    s := Value[n]; //pobranie n-tej lini
    if Length(t) + Length(s) >= x then //sprawdzenie, czy "przepełnienie" bufora
    begin //jak tak to wysłanie bufora i wyczyszczenie
      FSock.SendString(t);
      t := '';
    end;  
    t := t + s + CRLF; //dodanie do bufora kolejnej lini i CRLF
  end;
  if t <> '' then //wysłanie "końcówki"
    FSock.SendString(t);
  FSock.SendString('.' + CRLF); // . to znak końca maila
  Result := ReadResult = 250;
end;

jak widzisz nie ma tu żadnego sleep. Funkcja SendString sama blokuje wykonywanie dalszego kodu aż nie zostaną wysłane WSZYSTKIE dane z bufora.

I jeszcze małe info, dlaczego dane są jako TStringList - otóż załączniki przed wysłaniem są kodowane (np. do BASE64) i można je spokojnie przekazać razem z treścią właściwą maila jako string.

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