
Das Programm macht wie ich gesagt habe, einen Server auf und verbindet zu sich selbst und sendet sich selbst eine Zufallszahl zu. Diese Zufallszahl ist programmweit festgelegt, d. h. das Programm kann feststellen, ob die eingehende Verbindung auch von sich selbst stammt.
Wenn ja: grünes Licht, wenn wenn keine Verbindung mehr reinkommt, rotes Licht.
Wenn eine Verbindung eingeht, aber nicht die erwartete Zahl gesendet wird, wird angenommen, dass sich jemand fremdes verbunden hat, der wird dann rausgeschmissen.
Viel Spaß damit. Hoffe, du darfst jetzt 1 Stunde früher aus der Sonne.

Code: Alles auswählen
EnableExplicit
Enumeration
#server
#fenster
#ipadresse
#statusfarbe
#statustext
#sound
#sticky
EndEnumeration
If Not InitNetwork() ; Netzwerk prüfen
MessageRequester("Modem Indikator", "Problem: Netzwerk ist nicht verfügbar!", #MB_ICONERROR)
End
EndIf
If Not CreateNetworkServer(#server, 4097, #PB_Network_UDP) ; Server erstellen
MessageRequester("Modem Indikator", "Problem: Server könnte nicht geöffnet werden!", #MB_ICONERROR)
End
EndIf
Procedure status(status)
Static statusAlt=-1, timeout ; Sound kommt nur max. alle 2 Sek. egal wie schnell diese Procedure aufgerufen wird
If status <> statusAlt
If status
SetGadgetColor(#statusfarbe, #PB_Gadget_BackColor, #Green)
SetGadgetText(#statustext, "Verbunden")
If GetGadgetState(#sound) And ElapsedMilliseconds() > timeout
MessageBeep_(#MB_ICONINFORMATION)
EndIf
Else
SetGadgetColor(#statusfarbe, #PB_Gadget_BackColor, #Red)
SetGadgetText(#statustext, "Nicht verbunden")
If GetGadgetState(#sound) And ElapsedMilliseconds() > timeout
MessageBeep_(#MB_ICONSTOP)
EndIf
EndIf
timeout=ElapsedMilliseconds()+2000
statusAlt=status
EndIf
EndProcedure
OpenWindow(#fenster, #PB_Ignore, #PB_Ignore, 330, 140, "Modem Indikator", #PB_Window_MaximizeGadget|#PB_Window_ScreenCentered)
CreateGadgetList(WindowID(#fenster))
TextGadget(#PB_Any, 5, 10, 115, 15, "Diese IP prüfen:")
IPAddressGadget(#ipadresse, 120, 5, 200, 20)
SetGadgetState(#ipadresse, MakeIPAddress(192, 168, 2, 2))
Frame3DGadget(#PB_Any, 5, 35, 320, 60, "Status:", #PB_Frame3D_Single)
ContainerGadget(#statusfarbe, 40, 50, 30, 30, #PB_Container_Raised)
CloseGadgetList()
TextGadget(#statustext, 75, 60, 150, 20, "Noch nicht getestet")
CheckBoxGadget(#sound, 5, 100, 200, 15, "Akustisches Signal")
SetGadgetState(#sound, 1)
CheckBoxGadget(#sticky, 5, 120, 200, 15, "Fenster immer im Vordergrund")
Define timeoutClient, timeoutServer, verbunden, verbundenAlt=-1, zahl=Random(1<<31), *buffer=AllocateMemory(SizeOf(Long))
Repeat
Select WaitWindowEvent(100)
Case #PB_Event_CloseWindow
Break
EndSelect
If ElapsedMilliseconds() > timeoutClient
Define connection=OpenNetworkConnection(GetGadgetText(#ipadresse), 4097, #PB_Network_UDP)
If connection
SendNetworkData(connection, @zahl, SizeOf(long))
CloseNetworkConnection(connection)
EndIf
timeoutClient=ElapsedMilliseconds()+100
EndIf
If ElapsedMilliseconds() > timeoutServer
verbunden=0
While NetworkServerEvent() = #PB_NetworkEvent_Data
ReceiveNetworkData(EventClient(), *buffer, SizeOf(Long))
If PeekL(*buffer) = zahl
PokeL(*buffer, 0)
verbunden=1
Else
CloseNetworkConnection(EventClient())
EndIf
Delay(1)
Wend
If verbunden <> verbundenAlt
status(verbunden)
verbunden=verbundenAlt
EndIf
timeoutServer=ElapsedMilliseconds()+300
EndIf
StickyWindow(#fenster, GetGadgetState(#sticky))
ForEver
End
Bitte poste Feedback und evtl. vorhandene Fragen zum Code!
