MultiServer funktioniert plötzlich nicht mehr

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von themalta.

    MultiServer funktioniert plötzlich nicht mehr

    Leute, ich bins mal wieder mit einem Problem.
    unser MultiServer funktioniert ganz plötzlich nicht mehr!
    Also wenn der Multiserver was eintragen soll kommt:
    NullReference Exception wurde nicht behandelt.
    Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.


    und zwar kommt dieser Fehler in der 3. Zeile

    VB.NET-Quellcode

    1. a = 0
    2. If Relais = False Then
    3. streamw.WriteLine("Funk|Relan")
    4. streamw.Flush()
    5. End If
    6. streamw.WriteLine("FMS|" & FzID.Text & "|3")
    7. streamw.Flush()
    8. TextBox1.Text = LFahrzeug.Text


    Wenn ich bei der IP was falsche Eintrage, gibt es keinen UNterschied!

    VB.NET-Quellcode

    1. Imports System.Net.Sockets
    2. Imports System.Text
    3. Imports System.IO
    4. Public Class FMSLST
    5. Dim anzahl As String
    6. Private stream As NetworkStream
    7. Private streamw As StreamWriter
    8. Private streamr As StreamReader
    9. Private client As New TcpClient
    10. Private t As New Threading.Thread(AddressOf Listen)
    11. Private Delegate Sub DAddItem(ByVal s As String)
    12. Public ID As String
    13. Public nick As String
    14. Private ip As String = "tsbb.dyndns.orggg"
    15. Dim a As Integer = 0
    16. Dim Relais As Boolean = False


    VB.NET-Quellcode

    1. Private Sub FMS_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
    2. Try
    3. client.Connect(ip, 8001)
    4. If client.Connected Then
    5. stream = client.GetStream
    6. streamw = New StreamWriter(stream)
    7. streamr = New StreamReader(stream)
    8. streamw.WriteLine(nick)
    9. streamw.Flush()
    10. Else
    11. End If
    12. Catch ex As Exception
    13. End Try
    14. End Sub
    Ich kenne jetzt diesen Multiserver nicht so ganz aber dieser Fehler bedeutet normalerweise, dass ein Objekt keine Instanz hat.
    Beispiel:

    VB.NET-Quellcode

    1. Dim Beispiel As System.Collections.Specialized.StringCollection

    Bei dieser Variable wird diese Fehlermeldung angezeigt.
    Denn man muss ein

    VB.NET-Quellcode

    1. New


    nach dem

    VB.NET-Quellcode

    1. As


    setzen.

    Ich bin mir nicht ganz sucher, aber versuch das mal bei

    VB.NET-Quellcode

    1. Private streamw As StreamWriter



    Ich denke mal damit kannst du was anfangen. :)

    Gruß
    Erstmal vielen Dank für deine Antwort aber der Fehler kommt ja bei

    VB.NET-Quellcode

    1. streamw.WriteLine("Funk|Relan")

    und wenn ich

    VB.NET-Quellcode

    1. Private streamw As StreamWriter

    durch

    VB.NET-Quellcode

    1. Private streamw As New StreamWriter

    ersetzte kommt folgende Fehelrmeldung:
    Fehler bei der Überladungsauflösung, da keine zugreifbare "New" die Anzahl von Argumenten akzeptiert
    Es steht ja:

    VB.NET-Quellcode

    1. Private Sub FMS_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
    2. Try
    3. client.Connect(ip, 8001)
    4. If client.Connected Then '
    5. stream = client.GetStream
    6. streamw = New StreamWriter(stream)


    Erst mal: Nimm TryCatch raus! Sofort! Das hat hier nichts zu suchen. Wenn hier ein Fehler auftritt soll er ja debuggt und nicht ignoriert werden.

    Dann: Setze einen Haltepunkt bei If client.Connected Then und überprüfe im Einzelschrittdebugging, ob der client wirklich connected ist.
    Denn wenn er es nicht ist bleibt stream auch ohne Instanz, weil client.GetStream nicht ausgeführt wird.

    Wenn client.Connected True ist kann es noch daran liegen, dass client.GetStream keinen gültigen Stream zurückbringt und der Fehler durch TryCatch ignoriert wird.

    Lies Dir das durch: AvoidTryCatch
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    DosiSoft, danke für den Hinweis aber die IP habe ich im Programm schon richtig gehabt :)

    und Danke Niko Ortner, jetzt kommt nämlich bei

    VB.NET-Quellcode

    1. If client.Connected Then

    "SocketException wurde nicht behandelt.
    Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte 85.214.***.***:8001
    Deswegen denke ich mal dass in der ServerKonfiguration die Fehler liegen

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

    Da sieht man mal was Try Catch so für Sachen macht (oder genauer gesagt was es nicht macht). Und wie auf der Seite beschrieben: Dann sucht man den Fehler an der falschen Stelle.

    Das Problem liegt sicher am Server.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Hallo, war ein gaaanz dummer Fehler! Aber tausend dank für eure Unterstützung!
    Neues jetzt aufgetauchtes Problem:
    Die Software sendet fleißig an den Multiserver und der zeigt uns das auch an in der Oberfläche.
    Es geht darum der Client sendet eine ID und einen Status an den Server. Ein anderer Client soll sobald sich der Status für die ID ändert den Status im jeweiligen Textfeld anzeigen.
    Der Code dafür ist folgender:

    VB.NET-Quellcode

    1. Imports System.Net.Sockets
    2. Imports System.Text
    3. Imports System.Threading
    4. Imports System.IO
    5. Public Class Leitstelle
    6. Dim ID As String = "0"
    7. Dim FMSSt As String = "-|-|-|-"
    8. Private stream As NetworkStream
    9. Private streamw As StreamWriter
    10. Private streamr As StreamReader
    11. Private client As New TcpClient
    12. Private t As New Threading.Thread(AddressOf Listen)
    13. Private Delegate Sub DAddItem(ByVal s As String)
    14. Private nick As String = ID
    15. Private ip As String = "tsbb.dyndns.org"
    16. Dim Relais As Boolean = False
    17. Dim a As Integer = 0
    18. Dim swid As Integer
    19. Dim swt As String
    20. Dim wcl As New Net.WebClient
    21. Private Sub LST_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    22. Timer4.Start()
    23. client.Connect(ip, 8002)
    24. If client.Connected Then
    25. stream = client.GetStream
    26. streamw = New StreamWriter(stream)
    27. streamr = New StreamReader(stream)
    28. streamw.WriteLine(nick)
    29. streamw.Flush()
    30. End If
    31. streamw.WriteLine("FMSProt|1")
    32. streamw.Flush()
    33. End Sub
    34. Private Sub Timer4_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer4.Tick
    35. a += 1
    36. If a = 66 Then
    37. streamw.WriteLine("Funk|Relais")
    38. streamw.Flush()
    39. a = 0
    40. Timer4.Stop()
    41. End If
    42. End Sub
    43. Private Sub AddItem(ByVal s As String)
    44. FMSString.Text = s
    45. End Sub
    46. Private Sub Listen()
    47. While client.Connected
    48. Try
    49. Me.Invoke(New DAddItem(AddressOf AddItem), streamr.ReadLine)
    50. Catch
    51. End Try
    52. End While
    53. End Sub
    54. Private Sub FMSString_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FMSString.TextChanged
    55. Dim eingabe As String = FMSString.Text
    56. Dim teil() As String
    57. Dim i As Integer
    58. teil = eingabe.Split("|")
    59. If teil(i) = "FMS" Then
    60. i = 1
    61. Dim fzg As Integer = teil(i)
    62. i = 2
    63. Dim st As Integer = teil(i)
    64. FMS(fzg, st)
    65. End If
    66. End Sub


    Nur leider verändert sich rein gar nichts. der Client sendet also aber kann nicht auslesen, bzw. ändert die anzeige nicht.
    Findet jemand den Fehler?