Server mit Winsockets suchen (connect() blockiert zu lange)



  • Hallo,

    wie sucht man am besten nach einem Server auf einem bestimmten Port?

    Mein Ansatz war der, einfach in einer Schleife alle abzusuchenden IP's nacheinander prüfen, ob man mit connect() eine Verbindung herstellen kann.
    Wenn kein Server vorhanden ist, blockiert connect() für ca. 30 Sekunden, was bei 254 Adressen halt a bissl lange dauert :-/.

    Lässt sich da irgendwie ein Timeout setzten oder ist es allgemein eine schlechte Idee, auf diese Weise nach einem Server zu suchen?

    Ok, evtl 254 Threads aufmachen, dann dürfte es insgesammt nur 30 Sekunden dauern, ist aber trotzdem noch relativ lange.
    Wäre schön, wenn das Ergebnis nach ein paar Sekunden da ist (auch wenn dabei langsam antwortende Server nicht gefunden werden sollten, was im LAN wohl eher nicht der Fall sein dürfte...)

    Danke schon mal
    Martin



  • Einen Timeout für connect kann man leider nicht angeben...
    Man könnte höchstens diesen global verändern:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\
    Tcpip\Parameters\TcpMaxConnectRetransmissions

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\
    Tcpip\Parameters\Interfaces\interface\TcpInitialRTT

    Mehr Infos auch hier: http://www.microsoft.com/windows2000/techinfo/howitworks/communications/networkbasics/tcpip_implement.asp

    Aber prinzipiell würde ich sagen: An dem Konzept ist was faul... normalerweise wird es wie folgt gemacht:
    Der Server reagiert auf ein spezielles UDP-Datagram und alle antworten dann entsprechend, somit kann man sehr schnell und sehr einfach rausfinden, ob (im gleichen Segment) ein Server ist...
    Du kannst Dir auch mal das Protokoll von UPnP (Universal Plug-n-Play)anschauen...



  • lol glaube nicht das sich die Opfer ernst einen speziellen UDP-Server installieren :p



  • Das Umfeld wurde nicht beschrieben... vielleicht hat er den Server ja selber geschrieben...

    Aber noch als Ergänzung:
    Du kannst auch Raw-Sockets verwenden und den Verbindungsaufbau simulieren (SYNC). So arbeiten die Portscanner... hierzu gibt es auch diverse Open-Source Projekte...



  • hallo,

    OT: bist Du der MVP aus der ...vc newsgroup, der Name kommt mir irgendiwe bekannt vor 🙂 kann mich aber auch täuschen ...

    mfg



  • Er _ist_ es.



  • dann würde ich sagen

    mit 59 Beiträgen seit 2 Tagen der Anmeldung - Respekt. 🕶

    Grüße
    Martin Bauer ...vc



  • Ich hab mir noch überlegt, ob ich erst fragen soll, ob ich hier posten darf... Da der trend ja imme mehr zu Foren geht un im deutschsprachigen Raum nur dieses hier gut ist, dachte ich, ich probiere es mal... und das phpBB ist zuminedest etw
    s schöner und performante als die msdn-Foren...



  • anonymus schrieb:

    Ok, evtl 254 Threads aufmachen, dann dürfte es insgesammt nur 30 Sekunden dauern, ist aber trotzdem noch relativ lange.
    Wäre schön, wenn das Ergebnis nach ein paar Sekunden da ist (auch wenn dabei langsam antwortende Server nicht gefunden werden sollten, was im LAN wohl eher nicht der Fall sein dürfte...)

    die lebenden server sich doch in sekunden da. wo ist das problem?



  • Ich hab mir noch überlegt, ob ich erst fragen soll, ob ich hier posten darf... Da der trend ja imme mehr zu Foren geht un im deutschsprachigen Raum nur dieses hier gut ist, dachte ich, ich probiere es mal... und das phpBB ist zuminedest etw
    s schöner und performante als die msdn-Foren...



  • ok, dann lässt sich da nix machen.

    Evtl. lass ich dann den Server alle paar Sekunden einen Broadcast rausschicken.
    Dann finden ihn die Clients auch.

    thx
    Martin



  • sonnst einfach mal nach dem sourcecode von 'ping' gucken? das müsste doch auch weiterhelfen...



  • Ping hilft ja nicht weiter, da ja hier der Server UDP unterstützen müsste...
    Das schnellste ist SYN-simulieren... hierzu kannst Du Dir ja die Sourcen von diversen Port-Scannern mal anschauene...


Anmelden zum Antworten