2 Serverstatuse Gleichzeitg Überprüfen

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von picoflop.

    2 Serverstatuse Gleichzeitg Überprüfen

    Hallo leute , ich möchte 2 serverstatuse gleichzeitig mit diesem code überprüfen :
    #Region "Check Server Status"
    Private Sub CheckServerStatus()
    Dim tryconnect As New TcpClient

    Try
    tryconnect.Connect("85.214.58.82", 4514)
    Label7.ForeColor = Color.Lime
    Label7.Text = "Online"



    Catch ex As Exception
    Label7.ForeColor = Color.Red
    Label7.Text = "Offline"

    End Try
    End Sub
    #End Region

    wie kann ich da nochma sowas einfügen dass er auch den 2ten server überprüftz (gleiche ip nur anderer port und anderes label^^)

    danke im vorraus


    edit: ich habs jetz , aber warum brauchz das so ewig zum öffnen ? :S

    edit 2 : es kann immer nur ein server auf online angezeigt werden -.- der andere is immer auf offline obwohl der online is^^

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „General_Schnitzel“ ()

    Stichwort: Multithreading.

    In einem Thread kannste nicht 2 Connections gleichzeitig prüfen, da ein gewisser Timeout bzw. gewartet wird bis der Server antwortet, das kann je nach Anbindung paar Sek dauern und erst danach kann der 2 Server angefragt werden.
    Auch eine 2 Form bringt logischerweise nichts, weil die gesamte GUI standardmäßig im selben Thread läuft.

    Bedenke aber das aus einem, Thread nicht direkt auf GUI Elemente zugreifen kannst, wenn z.B. das Label ändern möchtest, das musst du dann über Delegates lösen.
    for da fun:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports AsyncCtpExtensions
    2. Imports System.Net.Sockets
    3. Imports System.Threading.Tasks
    4. Public Class TCPResult
    5. Public url As String
    6. Public port As Integer
    7. Public success As Boolean
    8. End Class
    9. Public Class foo
    10. Private Async Function TestConnect(url As String, port As Integer) As Task(Of TCPResult)
    11. ' simulate some slow network:
    12. Await TaskEx.Delay(1000)
    13. Dim t As New TcpClient
    14. Dim r As New TCPResult With {.url = url, .port = port, .success = False}
    15. Try
    16. Await t.ConnectAsync(url, port)
    17. If t.Connected Then r.success = True
    18. Catch ex As Exception
    19. ' failed for any reason, we dont care here
    20. End Try
    21. Return r
    22. End Function
    23. Public Async Function bar() As Task(Of IEnumerable(Of TCPResult))
    24. Dim url() As Tuple(Of String, Integer) = {New Tuple(Of String, Integer)("google.de", 80),
    25. New Tuple(Of String, Integer)("microsoft.com", 80),
    26. New Tuple(Of String, Integer)("heise.de", 80),
    27. New Tuple(Of String, Integer)("bnggrtdfddddd.com", 1234)}
    28. Debug.Print("wait check")
    29. Dim i = Await TaskEx.WhenAll(From tp As Tuple(Of String, Integer) In url Select TestConnect(tp.Item1, tp.Item2))
    30. Debug.Print("done check")
    31. Return i
    32. End Function
    33. End Class


    VB.NET-Quellcode

    1. Private Async Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Debug.Print("going out")
    3. Dim d As New foo
    4. For Each t As TCPResult In Await d.bar()
    5. Debug.Print(t.url & " : " & t.success)
    6. Next
    7. Debug.Print("coming home")
    8. End Sub



    Oder auch ganz simpel:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports AsyncCtpExtensions
    2. Imports System.Threading.Tasks
    3. Imports System.Net.Sockets
    4. Public Class Form1
    5. Private Async Function TestConnect(url As String, port As Integer) As Task(Of Boolean)
    6. ' simulate some slow network:
    7. Await TaskEx.Delay(1000)
    8. Dim t As New TcpClient
    9. Dim r As Boolean = False
    10. Try
    11. Await t.ConnectAsync(url, port)
    12. If t.Connected Then r = True
    13. Catch ex As Exception
    14. ' failed for any reason, we dont care here
    15. End Try
    16. Return r
    17. End Function
    18. Private Async Sub CheckOnlineStatus()
    19. Dim url() As Tuple(Of String, Integer) = {New Tuple(Of String, Integer)("google.de", 80),
    20. New Tuple(Of String, Integer)("microsoft.com", 80),
    21. New Tuple(Of String, Integer)("heise.de", 80),
    22. New Tuple(Of String, Integer)("bnggrtdfddddd.com", 1234)}
    23. For Each tp As Tuple(Of String, Integer) In url
    24. ListBox1.Items.Add("checking " & tp.Item1)
    25. Dim r As Boolean = Await TestConnect(tp.Item1, tp.Item2)
    26. Dim s As String = tp.Item1 & ": "
    27. ListBox1.Items.RemoveAt(ListBox1.Items.Count - 1)
    28. If r Then
    29. s &= "online"
    30. Else
    31. s &= "OFFLINE"
    32. End If
    33. ListBox1.Items.Add(s)
    34. Next
    35. End Sub
    36. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    37. Debug.Print("checking")
    38. CheckOnlineStatus()
    39. Debug.Print("checking done")
    40. End Sub
    41. End Class

    Man beachte, dass die Form weiterhin reagiert und das keine threadübergreifenden Zugriffe stattfinden!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „picoflop“ ()

    naja es geht jetz alles soweit aber gibts da auch nen code für dass sich dass immer aktualisiert ohne dass man den launcher (ja is für nen privat server ^^) neustarten muss ??? aber es soll halt immer direkt im launcher angezeigt werden nicht iwie im extra fenster. wenn möglich dann auch in rot (offline) grün (online) zb. Gameserver= Offline (In rot)

    edit : hm oke , danke , dann kann ich wohl nur einen server überprüfen entweder auth oder gameserver :S