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.