przyspieszenie pracy gniazd ( sockety )

0

Witam :)

mam pytanko bo tak sie bawie socketami, lece z matriałem ale mam pytanie odnośnie przyspieszenia pracy gniazd to jest :
napisałem dla przykladu beznadziejnie prosty skaner portow ot taki :

int main(int argc, char* argv[])
{
WSADATA       wsd;
SOCKET        sClient;
sockaddr_in server;
hostent    *host = NULL;
char	szServer[128];
cout << "Podaj IP: ";
cin >> szServer;

WSAStartup(MAKEWORD(2,2), &wsd);

for ( int i = 130 ; i < 140 ; i++ )
{
sClient = socket(AF_INET, SOCK_STREAM, 0);
server.sin_family = AF_INET;
server.sin_port = htons((u_short)i);
server.sin_addr.s_addr = inet_addr(szServer);


if (connect(sClient, (sockaddr *)&server,sizeof(server)) != SOCKET_ERROR)
    cout << "Polaczono. na porcie " << i << endl;


cout << i << endl;
} // do mojego
WSACleanup();
getch();
return 0;
}

Tyle ze w ciagu sekundy leca tylko dwa porty a bym chcial wiecej :)

jak mozna przyspieszyc ta prace ?

oczywiscie wątki to jedna rzecz istnieje jakis inny jeszcze sposob :) ?

z gory dzieki za pomoc :)

0

Zakupić szybsze łącze.

0

w pętli wywołuj wątki które sprawdzają czy dany port jest wolny.. jednoczesnie bedziesz mogl sprawdzac kilkanascie portow..

0

Wątki to dobry pomysł ale trzeba uważać żeby z nimi nie przesadzić :) Cały program można przyśpieszyć nie koniecznie obciążając system dodatkowymi wykonaniami poprzez wątki. Chodzi tutaj o asynchroniczną obsługę operacji sieciowych. W tym celu utwórz kilka gniazd, przełącz je w tryb asynchroniczny, zainicjuj próbę nawiązania połączenia i dopisz je do wspólnego zestawu gniazd obserwowanych funkcją select. Kiedy funkcja zakończy działanie wystarczy już tylko sprawdzić wszystkie gniazda i wyświetlić wyniki. Jeżeli zastosujesz tą raczej najszybszą metodę możesz dodatkowo jeśli chcesz wywołać jeszcze kilka wątków i już w ogóle powinien być max, ale sama próba asynchronicznych połączeń powinna dać niezły efekt. [green]

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