Forum » Programiranje » Casovni problem v C/C++
Casovni problem v C/C++
![](https://static.slo-tech.com/stili/avatar_gray.gif)
nicnevem ::
Naredil sem en beden prog, ki preverja če je določen IP na netu ( in če posluša na določenem portu )...
Stvarca je narejena v grafičnem načinu, sicer bolj zanič, ampak deluje pa le
V primeru da je online mi nekaj izpiše in to zlo hitro....v nasprotnem primeru pa melje ful dolgo, kot da bi skeniral pol neta in šele pol napiše da je pač offline. Meni gre na živce ker tak dolg traja pa me zanima če se da to na kak način popravit?
zahvaljujem se za vsakršen hint, če pa rabite še kaj vedet (mogoče videt source, ki ga najrajš ne kažem okol
) pa kar na dan z besedo
Stvarca je narejena v grafičnem načinu, sicer bolj zanič, ampak deluje pa le
![:)](https://static.slo-tech.com/smeski/icon_smile.gif)
V primeru da je online mi nekaj izpiše in to zlo hitro....v nasprotnem primeru pa melje ful dolgo, kot da bi skeniral pol neta in šele pol napiše da je pač offline. Meni gre na živce ker tak dolg traja pa me zanima če se da to na kak način popravit?
zahvaljujem se za vsakršen hint, če pa rabite še kaj vedet (mogoče videt source, ki ga najrajš ne kažem okol
![:8)](https://static.slo-tech.com/smeski/icon_redface.gif)
![;)](https://static.slo-tech.com/smeski/icon_wink.gif)
![](https://static.slo-tech.com/stili/avatar_gray.gif)
SasoS ::
Zato ker...če je mašina na netu dobi takoj odgovor in ti to izpiše. V nasprotnem primeru mora čakati na timeout (ker pač odgovora ni) in odvisno na koliko je ta timeout naštiman moraš čakati toliko časa.
![](https://static.slo-tech.com/stili/avatar_gray.gif)
nicnevem ::
Torej moram na en način nastavit timeout, ki je v mojem primeru občutno predolg - cca. : 20 sekund
, oziroma tolko časa prog melje da mi vrne offline status....
CCfly ni skripta, ampak ena funkcija + še nekaj šare, ki sem jo od nekoga copy->pastal
Kako se napiše koda v post da so ta pravi zamiki pa te reči?
![8-O](https://static.slo-tech.com/smeski/icon_eek.gif)
![:|](https://static.slo-tech.com/smeski/icon_confused.gif)
CCfly ni skripta, ampak ena funkcija + še nekaj šare, ki sem jo od nekoga copy->pastal
![:8)](https://static.slo-tech.com/smeski/icon_redface.gif)
Kako se napiše koda v post da so ta pravi zamiki pa te reči?
![](https://static.slo-tech.com/stili/avatar_gray.gif)
kopernik ::
Kako se napiše koda v post da so ta pravi zamiki pa te reči?
Svojo kodo obdaj s slo-tech tagom st.koda.
Natančnejše navodilo si preberi v tem članku
Svojo kodo obdaj s slo-tech tagom st.koda.
Natančnejše navodilo si preberi v tem članku
![](https://static.slo-tech.com/stili/avatar_gray.gif)
nicnevem ::
thx, kopernik...
no, stvarca zgleda nekako takole (mal krame sm ven zmetal):
Problem je ker se mi ne sanja na kak način bi zmanjšal tist timeout....ali pa na kak drug način naredil da bi stvar delala hitreje v primeru da je comp offline. Če ima kdo preveč cajta in volje naj prosim malo pogleda kodo...kak hint bi bil zlo dobrodošel
no, stvarca zgleda nekako takole (mal krame sm ven zmetal):
bool checkPort( int port, u_long IP ) { struct sockaddr_in client; bool ok = true; bool open; int sock; client.sin_family = AF_INET; client.sin_port = htons(port); client.sin_addr.s_addr = IP; sock = socket(AF_INET, SOCK_STREAM, 0); open = (connect(sock, (struct sockaddr *) &client,sizeof(client)) == 0); if(open) { return true; //Connection accepted } else { return false; } } } u_long LookupAddress(const char* szHost) { u_long nRemoteAddr = inet_addr(szHost); if (nRemoteAddr == INADDR_NONE) { //szHost is not dotted-quad, so resolve.. hostent* pHE = gethostbyname(szHost); if (pHE == 0) { return INADDR_NONE; } nRemoteAddr = *((u_long*)pHE->h_addr_list[0]); } return nRemoteAddr; } /* ta glavna funkcija, ki kliče prvi dve... */ bool portscan() { u_long nIP; //unsigned long integer -> (pozit. celo št.) bool connect; WSADATA wsaData; //ena struktura if(WSAStartup(0x0101, &wsaData) != 0) { //cerr << "An error occured when trying to initialize winsock" << endl; return false; } nIP = LookupAddress( IP ); if (nIP == INADDR_NONE) { //cerr << "Unable to resolve " << IP << endl; return false; } in_addr Address; memcpy(&Address, &nIP, sizeof(u_long)); connect = checkPort( nPort, nIP ); WSACleanup(); delete[] IP; return connect; //true if accept. else false }
Problem je ker se mi ne sanja na kak način bi zmanjšal tist timeout....ali pa na kak drug način naredil da bi stvar delala hitreje v primeru da je comp offline. Če ima kdo preveč cajta in volje naj prosim malo pogleda kodo...kak hint bi bil zlo dobrodošel
![:)](https://static.slo-tech.com/smeski/icon_smile.gif)
![](https://static.slo-tech.com/stili/avatar_gray.gif)
nicnevem ::
Zdej sem pa res že siten, heh
Kako se naredi da 2 funkciji tečeta istočasno? Večnitnost al kaj druzga?
Kako se naredi da 2 funkciji tečeta istočasno? Večnitnost al kaj druzga?
![:\](https://static.slo-tech.com/smeski/icon_rolleyes.gif)
![](https://static.slo-tech.com/stili/avatar_gray.gif)
kopernik ::
V osnovi je torej problem timeout. Dodatno ta problem poslabšuje dejstvo, da so tej timeouti pri network povezavah lahko različni od sistema do sistema ali pa od prog. jezika do prog. jezika (še posebej pri C-ju, kjer moraš dobro prebrati, kakšna je implementacija [cc, gcc za *nix; Microsoft, Borland za win ...]) - ti bo kak C maher kaj več povedal. Skratka, nikoli vnaprej ne veš, kolikšen bo timeout, ker ne veš, kje bo tvoj program tekel.
Ena rešitev je uporaba threadov (niti). Povezavo do nekega URL-ja vzpostaviš v svoji niti, v glavni niti pa čakaš, da se povezava v drugi niti vzpostavi. Ker lahko iz glavne niti nadzoruješ čas izvajanja ostalih niti, je potem problem rešen. Po npr. petih sekundah prekineš nit, ki skrbi za povezavo, in uporabniku vrneš odgovor.
Za C++ ti žal ne znam pomagati, ker se v tem jeziku še nikoli nisem ukvarjal z nitkami :-) Če želiš, ti lahko podam rešitev v Javi.
Ena rešitev je uporaba threadov (niti). Povezavo do nekega URL-ja vzpostaviš v svoji niti, v glavni niti pa čakaš, da se povezava v drugi niti vzpostavi. Ker lahko iz glavne niti nadzoruješ čas izvajanja ostalih niti, je potem problem rešen. Po npr. petih sekundah prekineš nit, ki skrbi za povezavo, in uporabniku vrneš odgovor.
Za C++ ti žal ne znam pomagati, ker se v tem jeziku še nikoli nisem ukvarjal z nitkami :-) Če želiš, ti lahko podam rešitev v Javi.
Zgodovina sprememb…
- spremenil: kopernik ()
![](https://static.slo-tech.com/stili/avatar_gray.gif)
sid_dabster ::
Glede na to, da tocno ves, koliko threadov bos imel (2), ni nikakrsen problem spisati ustreznega programa. Le uporabi api CreateThread, kateremu med drugim podas kazalec na funkcijo, ki jo hoces laufat v locenem threadu. Pa pazi na mutexe, kar pa zaradi preprostosti programa sploh ne bo problem. Pa mislim, da jih sploh ne bos rabil.
Fallen beyond all grace deeper and deeper
The sound of her own blood dripping
Like sacred tears from a bleeding rose...( Embraced, Within)
The sound of her own blood dripping
Like sacred tears from a bleeding rose...( Embraced, Within)
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [c] ne sprejme UDP paketaOddelek: Programiranje | 960 (548) | slovencl |
» | [C++] bindOddelek: Programiranje | 1421 (1199) | fiction |
» | SMTP v c -juOddelek: Programiranje | 2099 (1240) | BigWhale |
» | Delo z omrezjem v linuxuOddelek: Programiranje | 1263 (1109) | CCfly |
» | C: connect() funkcija, kako nastaviti timeoutOddelek: Programiranje | 1707 (1488) | fefko-the-bulldog |