BikerHeinze Geschrieben 7. Oktober 2008 Geschrieben 7. Oktober 2008 Hallo, ich habe mir ein kleines Tool unter VB.Net 2008 geschrieben mit dem man Nachrichten an einen anderen schicken kann. Mein kleines Problem liegt darin, dass ich die Verbindung nicht schließen kann. Wenn ich die Verbindung trenne und will sie wieder verbinden kommt der Fehler "Auf das verworfene Objekt kann nicht zugegriffen werden. Objektname: System.Net.Sockets.TcpClient." Wie ich richtig die Verbindung trenne. Kann mir einer Helfen. Imports System.Net.Sockets Imports System.Text Imports System.Runtime.Remoting.Messaging Public Class Form1 Private TCP_Client As New TcpClient Dim bytes() As Byte Private Stream As NetworkStream Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed 'es wird nur gesendet wenn die verbindung steht If TCP_Client.Connected = True Then TCP_Client.Close() End If End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Show() Me.Activate() Me.Refresh() End Sub Private Sub onGetData(ByVal ar As System.IAsyncResult) Dim clientdata As String = Encoding.ASCII.GetString(bytes) Dim sendBytes As [byte]() = Encoding.ASCII.GetBytes(clientdata) Stream.Write(sendBytes, 0, sendBytes.Length) End Sub Private Sub CON_AN() If TCP_Client.Connected = True Then TXT_VERBINDUNG.Text = "Verbunden mit " + TXT_CLIENT.Text TXT_VERBINDUNG.Refresh() Else TXT_VERBINDUNG.Text = "Keine Verbindung" TXT_VERBINDUNG.Refresh() End If End Sub Private Sub BUT_TRENNEN_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BUT_TRENNEN.Click 'es wird nur gesendet wenn die verbindung steht If TCP_Client.Connected = True Then TCP_Client.Close() End If Call CON_AN() End Sub Private Sub BUT_SENDEN_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BUT_SENDEN.Click BUT_SENDEN.Enabled = False 'falls die verbindung nicht steht wird verbunden If TCP_Client.Connected = False Then 'On Error Resume Next TCP_Client.Connect(TXT_CLIENT.Text, xxxxx) 'On Error Resume Next Stream = TCP_Client.GetStream End If 'anzeigen ob eine Verbindung steht Call CON_AN() 'es wird nur gesendet wenn die verbindung steht If TCP_Client.Connected = True Then Dim sendBytes As [byte]() = Encoding.ASCII.GetBytes(TextBox1.Text) Stream.Write(sendBytes, 0, sendBytes.Length) Else 'ausgabe dass keine verbindung steht MsgBox("-> Es steht keine Verbindung mit - " + TXT_CLIENT.Text + " <-") End If BUT_SENDEN.Enabled = True End Sub End Class Zitieren
Argbeil Geschrieben 7. Oktober 2008 Geschrieben 7. Oktober 2008 Wenn du dir die Close Methode mal ansiehst ( TcpClient.Close Method (System.Net.Sockets) ) siehst du, das nicht nur die Verbindung geschlossen sondern auch das Objekt verworfen wird, du kannst nach einem Close das Objekt selbst also nicht mehr verwenden und musst ein neues Tcp Objekt erzeugen. Zitieren
BikerHeinze Geschrieben 7. Oktober 2008 Autor Geschrieben 7. Oktober 2008 Hallo Herr Wenk, wie könnte ich dann die Verbindung beenden. Habe nichts gefunden. Bitte ein Bsp. Danke Gruß Stefan Heinz Zitieren
Argbeil Geschrieben 7. Oktober 2008 Geschrieben 7. Oktober 2008 Hi, soweit ich es im Kopf habe ist Close schon der richtige Weg die Verbindung zu beenden, wenn du danach wieder eine Connection aufbauen willst musst du lediglich über new eine neue Klasse erstellen, die alte existiert nicht mehr. An der Stelle also TCP_Client = New TcpClient verwenden und die Verbindung wieder aufbauen. (oder direkt die ganze Zeit geöffnet lassen) Das Verhalten ist übrigens in der Regel bei .NET immer so, nach einem Form.Close(); kann das Formular auch nicht mehr verwendet werden. Zitieren
BikerHeinze Geschrieben 7. Oktober 2008 Autor Geschrieben 7. Oktober 2008 Danke für die schnelle Hilfe. Baue eine neue Verbindung vor jedem senden auf. Gruß Stefan Heinz Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.