TUdpSocket / WaitForData

0

Witam Od razu powiem ze nie chce innych komponentow typu Indy (chyba ze male).
poza tym jestem n00bem w programowaniu internetowym wiec prosze o w miare miale odpowiedzi.

A oto moj problem.
Chce wyslac pakiet do serwera ktory ma mi odpowiedziec. (chce uzyc trubu non-blocking).
Takze najpierw ustawim IP i PORT i potem sie lacze poprzez Connect,
zeby wyslac pakiet robie SendBuff,
potem zebc odebrac pakiet robie WaitForData(2000) i jesli wartosc bedzie True wtedy ReciveBuff
Wszystko byloby dobrze ale WaitForData nigdy nie jest True a TUdpSocket wywala mi kod bledu 10040 albo 10054 i niemam pojecia co z tym zrobic czy w ogóle dobrze to robie.

Probowalem trybem blocking ale wtedy gdy jakis serwer sobie nieodpowie to mi sie program zwiesza i tyle z dzialania programu :|.

Bardziej mi odpowiada metoda non-blocking gdyz moge ograniczyc czas czekania na odpowiedz serwera, myslame tez o watkach z trubem blocking ale np rabienie 100 watkow chyba troche mija sie z celem (to ma byc przegladarak serwerow i jak ma liste serwerow to nie bede sprawdzal pokoleio tylko np 100naraz). Okej mam nadziej ze mnie jakos rozumiecie i z gory dzieki za pomoc.

Tutaj troche prostego kodu jak ta mam u sibie:

  if Udp.Connect then
  begin
    Latency := GetTickCount;  

    Udp.SendBuf(Pakiet, sizeof(TPakiet));

    if Udp.WaitForData(2000) then             // jesli serwer nie dopowiada to widac ze czeka 2sekundy ale gdy odpowie to i tak nie zwraca wartosci True. (moze ja cos zle rozumuje)

      Udp.ReceiveBuf(Buff, sizeof(Buff))
    else Continue;

    Latency := GetTickCount - Latency; 
  end;

Aha jescze jedno jak zrobie tak:

  if Udp.Connect then
  begin
    Latency := GetTickCount;  

    Udp.SendBuf(Pakiet, sizeof(TPakiet));

    Udp.WaitForData(2000)
    Udp.ReceiveBuf(Buff, sizeof(Buff))

    Latency := GetTickCount - Latency;
  end; 

to TUdpSocket zwraca mi blede 10038 i jak serwer nie odpowie po 2sec wtedy 10035.

Wiem co te kody bledow oznaczaja ale mi nic niemowia i mecze sie z tym juz dwa dni dletgo pytam... google tez nie pomoglo. Jescze raz dzienks.

0
  1. co to jest TPakiet
  2. czemu UDP a nie TCP
  3. wątki to nic złego
  4. spróbuj Synapse
0
  1. To pakiet niewazne jaki bo na 100% wysylam poprawne dane. (pokazalem tylko zarys jak to robie)
  2. Niewiem :| moze dlatego ze sie laczy z serwerem UDP badz nie potrzebuje otrzymac wszyskich pakietow (przegladarka serwerow ma to byc)
  3. Przynajmniej spowiadac sie nie bede musial xD, ale wtedy timera bede musial dodac w trybie blocking zeby sie dowiedziec kiedy 2sec minely i zakonczyc moj watek dlatego wole nonblocking ktory nie dziala badz ja cos zle robie
  4. Sprawdzem ale jutro teraz 1:17 i chyba wszystkiego okej nie widze :|.
0

bump

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