Seite 1 von 3
Prüfen ob 2.Netzwerkkabel eingesteckt ist
Verfasst: 06.05.2008 15:26
von iron2006
Hi,
ich habe hier einen Rechner mit 2. Netzwerkkarten die erste dient zur kontaktaufnahme mit einem Server über die 2. werden Kabelmodem´s getestet. Das Programm zum testen wird über einen kleinen Button gestarten.
Mein Ziel ist es nun aber das der Test automatisch gestartet wird sobald das Netzwerkkabel eingesteckt wird.
Mein Code bisher funktioniert, ist aber leider zu träge.
Code: Alles auswählen
InitNetwork()
x=1
Repeat
Delay(15)
If (OpenNetworkConnection("192.168.100.1",80))<>0
If x=1
;MessageRequester("Info","Test wird gestartet",0)
RunProgram("c:\AutoMODEM.exe", "", "")
EndIf
x=0
Else
x=1
EndIf
ForEver
End
Der Test muss sofort gestartet werden sobald das Kabel eingesteckt wird . Nun habe ich diesen Code-schnipsel gefunden der aber leider nur bei einer Netzwerkkarte funktioniert.
Code: Alles auswählen
Connected.l
SenseAPI.l=OpenLibrary(0,"sensapi.dll")
FuncID.l=GetFunction(0,"IsNetworkAlive")
If CallCFunctionFast(FuncID,@Connected)
Debug "Kabel ist dran"
Else
Debug "Kabel fehlt"
EndIf
CloseLibrary(0)
Hat hier vielleicht jemand eine Idee? An diesem Rechner werden jeden Tag viele 100 Modem´s getestet daher wäre es schön wenn man das ganze automatisieren könnte.
[/code]
Verfasst: 06.05.2008 16:09
von NicTheQuick
Versuch das hier mal:
Code: Alles auswählen
Define IP.s, SensAPI.l, *FuncID
SensAPI = OpenLibrary(#PB_Any, "sensapi.dll")
*FuncID = GetFunction(SensAPI, "IsDestinationReachable")
IP = "192.168.100.1"
If CallCFunctionFast(*FuncID, @IP, 0)
Debug "Kabel ist dran"
Else
Debug "Kabel fehlt"
EndIf
CloseLibrary(SensAPI)
Das ist der andere Befehl aus der 'sensapi.dll', der allerdings in Vista (noch)
nicht implementiert ist.
http://msdn.microsoft.com/en-us/library ... S.85).aspx
Re: Prüfen ob 2.Netzwerkkabel eingesteckt ist
Verfasst: 06.05.2008 16:30
von AND51
iron2006 hat geschrieben:über die 2. werden Kabelmodem´s getestet.
Welche IP haben die Modems denn? immer dieselbe? Oder fangen sie wenigstens auf jeden Fall mit 192.168.x.x an?
Wenn ja, probier mal
ExamineIPAdresses(), geh alle IPs durch.
Zähl einfach mit, wie viele IPs gefunden werden und ggf, ob sie mit 192.168.x.x anfangen. Ist nur ne Idee...

Verfasst: 06.05.2008 16:56
von iron2006
Hallo und danke für die antworten,
bei dem Code oben bekomm ich leider einen Error:
"invalid memory access" Zeile 6
Betriebssystem ist XP!
Ja die KabelModem´s haben immer die IP 192.168.100.1 über diese werden Sie später beim Kunden auch angesprochen.
@Nicthe....
Hast du vielleicht noch eine Idee.
Gruß Iron2006
Verfasst: 06.05.2008 18:36
von AND51
iron2006 hat geschrieben:Ja die KabelModem´s haben immer die IP 192.168.100.1
Das heißt, mein Lösungsansatz wäre nicht geeignet

Verfasst: 06.05.2008 19:01
von iron2006
@AND51
doch es funktioniert ja, aber diese methode ist zu träge.
Der Test sollte schon direkt nach dem einstecken des Netzwerkkabels starten.
Sobald im Systray die meldung kommt verbindung wird hergestellt.
Mit der sensapi.dll funktioniert das sehr gut, aber eben nur bei einer Netzwerkkarte.
@NicTheQuick
Der Code funtioniert doch, habe nur:
IsDestinationReachableA (ANSI) eingefügt.
Die meldung Kabel drin oder draussen kommt aber leider auch viel zu spät!
Gibt es eine möglichkeit dieses Event der 2. LAN verbindung auszuwerten wenn er meldet das die verbindung hergestellt wird?
Verfasst: 06.05.2008 19:19
von AND51
Dann machs mal so:
Dein Testprogramm macht einen Server auf mit
CreateNetworkServer().
In einem Thread führst du dann in einer Schleife immer folgenden Befehl aus:
Code: Alles auswählen
Repeat
OpenNetworkConnection(0, "192.168.100.1", #PB_Network_UDP)
If SendNetworkString(0, "Test")
Debug "Modem online!"
EndIf
CloseNetworkConnection(0)
Delay(1000)
ForEver
Benutz aber UDP, denn bei TCP haste sonst einen sehr langen Timeout. Bei UDP wird immer eine Verbindung hergestellt; selbst, wenn das iel offline ist, kannst du die Senden-Befehle benuzten.
Sieh dir die Rückgabewerte an, ob etwas erfolgreich gesendet werden konnte.
Falls die Rückgabewerte besagen, dass erfolgreich gesendet wurde, obwohl
kein Moden angeschlossen ist, musst du eben nicht nur einen Server aufmachen, sondern auch ständig mit
EventNetworkServer() nach eingehenden Daten Aussschau halten.
Verstanden?

Verfasst: 06.05.2008 19:55
von iron2006
Verstanden?
Das wird sich morgen zeigen, bin ja Anfänger und beschäftige mich leider viel zu selten mit PB. Dieses Problem beschäftigt mich aber schon recht lange und so langsam werden meine Kollegen hier unruhig. Egal für heute ist Feierabend und ich will noch 1. Stunde in die Sonne.

Vielen Dank für die Hilfe, werde morgen berichten ob das klappt.
Verfasst: 07.05.2008 15:42
von iron2006
Hi,
leider komme ich mit den Netzwerk-Befehlen nicht klar.

Bezweifel auch das, das schnell genug wäre. Ich hoffe immer noch den Event auszuwerten wenn die Verbindung dabei ist hergestellt zu werden.
Na ja ich test das mal weiter hier und wenn einer von euch nicht in der Sonne liegt und eine Idee hat, ich bin hier noch 4 Stunden gefangen.

Gruß Iron2006
Verfasst: 07.05.2008 18:01
von NicTheQuick
Vielleicht kommt man an den Event aber auch gar nicht ran, weil da der
Anschluss sozusagen ja erst initialisiert wird. Die IP-Adresse werden ja auch
erst am Ende des Verbindungsversuchs vergeben, damit du mit dem Gerät
kommunizieren kannst.