TCP Client / Verbindung abbrechen / Timeout / VB 2005 und 2010

28/10/2010 - 17:57 von Jörn Janz | Report spam
Hallo NG,

ich möchte per TCP einen Server abfragen und habe ein für mich
passendes Beispiel gefunden.
Folgendes möchte ich umsetzen:
- Verbindung zum Server herstellen
- Wenn Server da > Nachricht / Abfrage senden
- Auf Antwort vom Server warten
- Verbindung schließen

Diese Sachen klappen bereits gut.
Folgendes Probleme habe ich noch:
Wenn der Server mir keine Antwort in einer bestimmten Zeit sendet dann
möchte ich die Verbindung schließen und eine Meldung ausgeben. Das
Programm làuft ja auch ohne Antwort nicht weiter...
Ich habe stream.ReadTimeout = 3000 eingebaut.
Wenn der Server nicht antwortet bekomme ich folgende Fehlermeldungen:

Eine Ausnahme (erste Chance) des Typs "System.IO.IOException" ist in
System.dll aufgetreten.
Exception:

ODER beim zweiten Versuch:
Eine Ausnahme (erste Chance) des Typs
"System.Net.Sockets.SocketException" ist in System.dll aufgetreten.
SocketException: System.Net.Sockets.SocketException (0x80004005): Es
konnte keine Verbindung hergestellt werden, da der Zielcomputer die
Verbindung verweigerte 192.168.100.44:9100
bei System.Net.Sockets.TcpClient..ctor(String hostname, Int32 port)
bei WindowsApplication1.clsTCP.TCP_Daten(String IP_Adresse, Int32
Port, String Message) in C:\Datenpfad\TCP-Client\TCP-Client
\clsTCP.vb:Zeile 18.

Hàngt es vielleicht an dem TcpClient und dem NetworkStream den ich
nicht schließe?
Wie kann ich in den Exception Client und Stream schließen?
Wie kann ich einen sauberen Timeout realisieren?

Hier der Beispielcode:

Public Function TCP_Daten(ByVal IP_Adresse As String, ByVal Port As
Integer, ByVal Message As String) As String
' Ich habe hier mal feste Daten eingebaut
Dim responseData As String = "0"
ip_Adresse = "192.168.100.44"
Port = 9100
Message = "#!A1" & vbCrLf & "#!X0#G" & vbCrLf & "#!P1#G"

Try
' Create a TcpClient.
Dim client As New TcpClient(IP_Adresse, Port)

' Translate the passed message into ASCII and store it as
a Byte array.
Dim data As [Byte]() System.Text.Encoding.ASCII.GetBytes(Message)

' Get a client stream for reading and writing.
Dim stream As NetworkStream = client.GetStream()

If client.Connected = True Then
' Send the message to the connected TcpServer.
stream.Write(data, 0, data.Length)

Debug.Print(Now() & "Sent: {0}", Message)

' Receive the TcpServer.response.
' Buffer to store the response bytes.
data = New [Byte](256) {}

' Read the first batch of the TcpServer response
bytes.
stream.ReadTimeout = 3000
Dim bytes As Int32
bytes = stream.Read(data, 0, data.Length)

responseData System.Text.Encoding.ASCII.GetString(data, 0, bytes)
Debug.Print(Now() & "Received: {0}", responseData)

End If
TCP_Daten = responseData
' Close everything.
stream.Close()
client.Close()

Catch e As ArgumentNullException
Debug.Print("ArgumentNullException: {0}", e)
TCP_Daten = "Fehler"
Catch e As SocketException
Debug.Print("SocketException: {0}", e)
TCP_Daten = "Fehler"
Catch e As Exception
Debug.Print("Exception: ", e)
TCP_Daten = "Fehler"

End Try

End Function
-

Vielen Dank für die Tips.

Gruß - Jörn

-
http://www.jrdrucksysteme.de
 

Lesen sie die antworten

#1 Jörn Janz
28/10/2010 - 18:39 | Warnen spam
Hallo,

ich bin mit der Frage umgezogen:
http://social.msdn.microsoft.com/Fo...ualbasicde

Bitte nicht hier antworten.

Danke. Jörn

Ähnliche fragen