Die Community zu .NET und Classic VB.
Menü

VB.NET-Tipp 0075: Computer per WakeOnLan-Paket wecken

 von 

Beschreibung

Dieser Tipp zeigt wie mit VB.NET ein WakeOnLan-Paket zusammengestellt und verschickt werden kann, um so einen anderen Rechner zu starten. Details zum Format finden sich unter Wake On LAN . Zudem wird demonstriert wie man unter Verwendung der RegEx-Klasse des Frameworks eine Eingabe daraufhin prüfen kann, ob sie dem Muster einer MAC-Adresse entspricht.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Framework-Version(en):

.NET Framework 1.0, .NET Framework 1.1, .NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5

.NET-Version(en):

Visual Basic 2002, Visual Basic 2003, Visual Basic 2005, Visual Basic 2008

Download:

Download des Beispielprojektes [11,97 KB]

' Dieser Quellcode stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Schäden
' wird nicht gehaftet.

' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
' Ansonsten viel Spaß und Erfolg mit diesem Source!

' Projektversion:   Visual Studio 2008
' Option Strict:    Aus
' Option Explicit:  An
' Option Infer:     An
'
' Referenzen: 
'  - System
'  - System.Data
'  - System.Deployment
'  - System.Drawing
'  - System.Windows.Forms
'  - System.Xml
'
' Imports: 
'  - Microsoft.VisualBasic
'  - System
'  - System.Collections
'  - System.Collections.Generic
'  - System.Data
'  - System.Drawing
'  - System.Diagnostics
'  - System.Windows.Forms
'

' ##############################################################################
' ################################# Form1.vb ###################################
' ##############################################################################
Imports System.Text.RegularExpressions

Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button1.Click

        Dim mac As String = txtMac.Text

        ' Prüfung ob Eingabe eine MAC-Adresse ist
        If Regex.IsMatch(mac, "^(?:[a-fA-F0-9]{2}[:-]?){6}$") Then
            Dim aMatch As Match = Regex.Match(mac, "[a-fA-F0-9]{2}")
            Dim macdata(0 To 5) As Byte
            Dim pos As Integer = 0

            ' Bestimmung der einzelnen Komponenten der MAC-Adresse
            While (aMatch.Success)
                macdata(pos) = Byte.Parse(aMatch.Value, _
                    Globalization.NumberStyles.HexNumber)
                pos = pos + 1
                aMatch = aMatch.NextMatch
            End While

            WakeOnLan.SendPaket(macdata)
        Else
            MsgBox("Eingegebener Text entspricht nicht dem Muster einer " & _
                "Mac-Adresse", _
                MsgBoxStyle.Exclamation, _
                "Fehlerhafte Eingabe")
        End If
    End Sub
End Class

' ##############################################################################
' ############################### WakeOnLan.vb #################################
' ##############################################################################
Imports System.Net
Imports System.Net.Sockets

Public Class WakeOnLan
    Public Shared Sub SendPaket(ByVal mac As Byte())
        If mac Is Nothing OrElse mac.Rank <> 1 OrElse mac.GetLength(0) <> 6 Then
            Throw New System.ArgumentException("Ungültiger Parameter: mac")
        End If

        ' Erstellt eine Instanz zur Kommunikation per UDP von einem beliebigen 
        ' lokalen Port
        Dim client As UdpClient = New UdpClient(0)
        ' Port 9 ist laut IANA discard, daher kann er ohne Probleme 
        ' verwendet werden
        Dim receiver As IPEndPoint = New IPEndPoint(IPAddress.Broadcast, 9)

        ' Für den Zusammenbau des WOL-Paketes
        Dim data(0 To (6 + 6 * 16) - 1) As Byte

        ' 6 mal FF
        For i As Integer = 0 To 5
            data(i) = &HFF
        Next

        ' 16 mal die MAC-Adresse
        For i As Integer = 6 To (6 + 6 * 16) - 1
            data(i) = mac(i Mod 6)
        Next

        ' Senden des Paketes
        client.Send(data, data.Length, receiver)
    End Sub
End Class

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 2 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Andreas am 20.10.2010 um 16:23

Bei mir hat es leider auf Anhieb nicht geklappt.
Erst als ich die IP Adresse meiner Netzwerkkarte von der ich senden will mit angegeben habe hat es funktioniert.
Ersetzte :
Dim client As UdpClient = New UdpClient(0)
Gegen
Dim client As UdpClient = New UdpClient(New IPEndPoint(IPAddress.Parse("192.168.119.100"), 0))

Hilfreich auch bei mehreren Netzwerkarten, die in unterschiedlichen Netze liegen.

Kommentar von 123 am 10.03.2010 um 18:32

Ein super Tipp, der auf Anhieb funktioniert und den Anfänger schnell zum experimentieren motiviert! Vielen Dank für diesen Beitrag!