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 Function wenn 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. |