| Hallo Leute, 
 ich habe heute eine sehr merkwürdige frage die ich leider in diesem Fall nur schwer "ergoogeln" kann deshalb stell ich sie auch.
 
 So sieht das Netzwerk aus:
 
 [CODE]Messchreiber 1                            Messchreiber 2
 IP:192.168.1.2 --------- Switch --------- IP: 192.168.1.3
 
 |
 |
 |
 |
 PC IP: 192.168.1.4[/CODE]
 
 Der PC hat wie die Messschreiber eine Statische IP (klar, weil kein DHCP Server vorhanden ist), alle Geräte haben die Subnetzmaske 255.255.255.0 ---> alle im gleichen netz
 
 
     Private Function Abruf(ByVal IP As String, ByVal ID As Integer) As String
        Dim con As New System.Net.Sockets.TcpClient(IP, 8000)
        Dim str As Net.Sockets.NetworkStream = con.GetStream
        Dim bytes As New List(Of Byte)
 
        If ID = 1 Then
            bytes.AddRange(SendAndGet(con, str, "013031024d30414e4c4730034a"))
            bytes.Add(13)
            bytes.AddRange(SendAndGet(con, str, "013031024d30414e4c4731034b"))
            bytes.Add(13)
            bytes.AddRange(SendAndGet(con, str, "013031024d30414e4c47320348"))
            bytes.Add(13)
            bytes.AddRange(SendAndGet(con, str, "013031024d304449475f30035b"))
            bytes.Add(13)
            bytes.AddRange(SendAndGet(con, str, "013031024d304449475f31035a"))
            bytes.Add(13)
            bytes.AddRange(SendAndGet(con, str, "013031024d304449475f320359"))
            bytes.Add(13)
        ElseIf ID = 2 Then
            bytes.AddRange(SendAndGet(con, str, "013031024d30414e4c4730034a"))
        End If
 
 
 
        str.Close()
        con.Close()
 
        Return System.Text.Encoding.ASCII.GetString(bytes.ToArray)
    End Function
 
    Private Function SendAndGet(ByRef con As System.Net.Sockets.TcpClient, _
                              ByRef str As Net.Sockets.NetworkStream, _
                              ByVal daten As String) As Byte()
        Dim sendbytes As Byte()
 
        sendbytes = Hex2Byte(daten) 'umwandeln in Bytes
        str.Write(sendbytes, 0, sendbytes.Length) 'Schreiben in den Outputstream
        Do : Loop Until con.Available > 0
        ReDim sendbytes(con.Available - 1) 'SendBytes umformen auf den Input
        str.Read(sendbytes, 0, con.Available) 'Auslesen des Inputstream
        SendAndGet = sendbytes
 
    End Function
 
    Private Function Hex2Byte(ByVal BinString As String) As Byte()
        Dim bytes As New List(Of Byte)
 
        For i As Integer = 0 To BinString.Length - 2 Step 2
            bytes.Add(Byte.Parse(BinString.Substring(i, 2), _
              Globalization.NumberStyles.HexNumber))
        Next
 
        Hex2Byte = bytes.ToArray
    End Functionwenn ich nun die Funktion Abruf einmal mit (192.168.1.2,1) und dann nochmal mit (192.168.1.3,2) werden beide Messschreiber ausgelesen und die empfangen Daten werden dann verarbeitet. 
 Dies wird alle 2 Minuten gemacht Abfrage 1, Abfrage 2 und dann Verarbeitung. Das merkwürdige ist jetzt:
 
 Der erste Abruf geht ohne Probleme (also 192.168.1.2) aber der 2.te Messchreiber (192.168.1.3) reagiert nach dem 1.ten mal abrufen nicht mehr. Das heißt ich ruf einmal beide ab, wart 2 Minuten und ruf dann wieder beide ab. Nun bleibt das Programm an der Zeile "Dim con As New System.Net.Sockets.TcpClient(IP, 8000)" stehen und bringt die Fehlermeldung das keine Verbindung zu 192.168.1.3 hergestellt werden könnte. Komisch ? Gerade ging’s noch aber beim 2.ten mal funktioniert es nicht mehr. Was mache ich falsch? Wichtig ist auch noch das ich dann den 2.ten Messchreiber nicht mehr anpingen kann.
 
 Das schlimmste ist ja: Wenn ich den Switch durch einen Router tausche und dann den PC auf DHCP stelle funktioniert mein Programm problemlos.
 
 Außerdem zu nennen ist wenn ich anstatt mit meinem Programm, das Programm vom Hersteller benutze kann ich die Geräte so oft wie ich will auslesen... nur hab ich mich entschieden die Geräte selber abzufragen da ich die Daten dann schneller und einfacher anzeigen kann. Da ich die Pakete 1:1 wie das Programm des Herstellers versende kann der Schreiber das nicht merken das es ein anderes Gerät ist.
 
 mfg
 HyP3r
 
 Beitrag wurde zuletzt am 24.07.08 um 20:56:10 editiert.
 |