VB - StreamReader - benötig schnelle hilfe!

11/22/2011 16:03 D3giX#1
Hi ich hab ein Problem und zwar bin ich grad dabei für eine Kumpel ein kleines Proggi zu machn...

(für Telnet)

so ich hab das jetzt so
Code:
client_send(Befehlsbox.Text)
                RichTextBox1.Text = Temp & "Ich: " & Befehlsbox.Text & vbCrLf
                Temp = RichTextBox1.Text
                RichTextBox1.Text = Temp & "Server: " & streamr.ReadLine & vbCrLf
                Temp = RichTextBox1.Text
                RichTextBox1.Select(RichTextBox1.Text.Length, 0)
                RichTextBox1.ScrollToCaret()
damit lese ich allerdings nur wie auch schon der name "ReadLine" eine Line aus... ich möchte aber das der alles was der empfängt ließt und mir in die RichTextBox1 schreibt ... wie lös ich das jetzt ?
11/22/2011 16:07 Jopsi332#2
Dim tmp as string = streamr.readline
streamw.writeline(tmp)

kommt halt drauf an ob multithreading mit list und so usw.
11/22/2011 16:14 D3giX#3
Edit : grad was am versuchen :)
11/22/2011 16:18 Kraizy​#4
Wie meinst du alles, was er empfängt? Was steht denn in der RTB, wenn du einen Satz schreibst und dann schreibt der andere einen und was willst du, dass dort dann stehen soll?
@Jopsi was hat das mit Multithreading zu tun?
11/22/2011 16:27 Jopsi332#5
dann wäre es z.b.
listensub(ByVal con As Connection)
Dim tmp as string = con.streamr.readline
con.streamw.writeline(tmp)
11/22/2011 16:32 Kraizy​#6
Quote:
Originally Posted by Jopsi332 View Post
dann wäre es z.b.
listensub(ByVal con As Connection)
Dim tmp as string = con.streamr.readline
con.streamw.writeline(tmp)
Das hat der doch bereits schon, anscheinend will er aber etwas anderes..
11/22/2011 17:36 D3giX#7
Also ich hab die RichTextbox jetzt weggemacht und ne Listbox genommen....
Also ich verbinde mich mit ner Adresse ... z.B. in meinem fall cobra.2x.to:10033
dann krieg ich die Antwort : Ts3
so wenn ich das gleiche jetzt ohne meine proggi mache mit telnet cobra.2x.to:10033 steht da :
1.ZEILE ------Ts3
2.Zeile -------Bitte gebe hilfe .... ein um blablablalb
So ... ich möchte das mein Programm nicht nur Zeile 1 holt sondern auch Zeile 2 und folgend......

hier mal meine jetztiger Code:

Code:
Imports System.Net.Sockets
Imports System.IO



Public Class Form1


    'Variablen:
    Dim status As Boolean = False
    Dim Adresse As Boolean = False
    Dim Port As Boolean = False
    Dim readytosendbefehle As Boolean = False
    Dim stream As NetworkStream
    Dim streamw As StreamWriter
    Dim streamr As StreamReader
    Dim Client As System.Net.Sockets.TcpClient


 
    '_________________
  






    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If Adresse = True Then
            If Port = True Then
                Try
                    Client = New System.Net.Sockets.TcpClient 'Neuer TcpCLient damit Reconnect funktioniert!
                    Client.Connect(Serverip.Text, Serverport.Text)  'Client verbindet sich mit IP und Port

                    If Client.Connected Then

                        stream = Client.GetStream ' Stream wird auf Client verwiesen
                        streamw = New StreamWriter(stream) ' Stream zum Senden wird deklariert
                        streamr = New StreamReader(stream) ' Stream zum Empfangen wird deklariert

                        login() ' Sub Login

                    Else

                        ListBox1.Items.Add("Verbidnung konnte nicht mit " & Serverip.Text & ":" & Serverport.Text & " aufgebaut werden!")

                    End If
                Catch
                    ListBox1.Items.Add("Verbidnung konnte nicht mit " & Serverip.Text & ":" & Serverport.Text & " aufgebaut werden! Da der Zugriff verweigert wurde!")

                End Try
            Else
                ListBox1.Items.Add("Sie müssen noch einen Port eintragen um sich verbinden zu können!")

            End If
            
        Else
            ListBox1.Items.Add("Sie müssen eine Adresse und Port eingetragen um sich Verbinden zu können!")

        End If
        

        



    End Sub
   



    Sub client_send(ByVal text As String)
        streamw.WriteLine(text)
        streamw.Flush()
    End Sub


    Function client_recieve() As String
        client_recieve = streamr.ReadLine
    End Function




    ' Nach der erfolgreichen verbindung mit der IP und dem Port wird dieser Sub aufgerufen:
    Sub login()
        Try

            Dim tmp As String = streamr.ReadLine



            streamw.WriteLine(tmp)
            client_send("test")
            ListBox1.Items.Add("Verbindung Erfolgreich!")
            ListBox1.Items.Add("Server: " & tmp)
            readytosendbefehle = True





            Exit Sub  ' Versteht sich von Selbst...




        Catch
            ListBox1.Items.Add("FEHLER!! KONNTE MESSAGE NICHT ÜBERMITTELN!!!!") ' Hier kann man eine Error Message ausgeben oder eine Automatische Fehlerbehebung machen,....
        End Try

    End Sub



    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        If Client.Connected Then
            Client.Close()
            streamw.Flush()
            ListBox1.Items.Add("Verbindung erfolgreich geschlossen!")

        Else
            ListBox1.Items.Add("ERROR: Verbindung konnte nicht geschlossen werden!")
        End If

    End Sub








    Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click

        If status = False Then
            Me.Size = New System.Drawing.Size(1024, 456)
            status = True
        Else
            Me.Size = New System.Drawing.Size(1024, 360)
            status = False
        End If


    End Sub

    Private Sub Senden_Click(sender As System.Object, e As System.EventArgs) Handles Senden.Click
        If readytosendbefehle = True Then
            Try
                Dim tmp As String = streamr.ReadLine


                client_send(Befehlsbox.Text)
                streamw.WriteLine(tmp)
                ListBox1.Items.Add("Ich: " & Befehlsbox.Text)
                ListBox1.Items.Add("Server: " & tmp)
                ListBox1.SelectedIndex = ListBox1.Items.Count - 1
                ListBox1.ClearSelected()






            Catch
                MsgBox("Sorry es gab ein Fehler beim Senden/Empfangen bitte überprüfen sie ihre Verbindung zum Server!")
            End Try

        Else
            MsgBox("Du kannst keine Befehle senden ohne eine aktive Verbindung zu haben!")


        End If

    End Sub


    Private Sub Serverip_TextChanged(sender As System.Object, e As System.EventArgs) Handles Serverip.TextChanged
        Adresse = True
    End Sub

    Private Sub Serverport_TextChanged(sender As System.Object, e As System.EventArgs) Handles Serverport.TextChanged
        Port = True

    End Sub


   
End Class

EDIT: Hier nochn 3 vergleichs screeens

Vergleich Nr1. :


[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
Vergleich Nr2. :


[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
Vergleich Nr3. :


[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
11/22/2011 17:57 Jopsi332#8
haste acuh streamw.writeline.flush und so verwednet?
11/22/2011 18:18 D3giX#9
Jop in Z73....

Code:
'hier nochmal die Deklara
Dim stream As NetworkStream
    Dim streamw As StreamWriter
    Dim streamr As StreamReader
    Dim Client As System.Net.Sockets.TcpClient



Sub client_send(ByVal text As String)
        streamw.WriteLine(text)
        streamw.Flush()
 End Sub

und dann wenn ich befehl sende dann
*das mit dem dim meinteste ja sollte ich machn ... weiß jetzt nicht obs richtig is....
Code:
Dim tmp As String = streamr.ReadLine


                client_send(Befehlsbox.Text)
                streamw.WriteLine(tmp)
                ListBox1.Items.Add("Ich: " & Befehlsbox.Text)
                ListBox1.Items.Add("Server: " & tmp)
                ListBox1.SelectedIndex = ListBox1.Items.Count - 1
                ListBox1.ClearSelected()
11/22/2011 18:28 Jopsi332#10
das sollte eig in den server dachte du hättestet nen chat server gemacht und net nen ts3 server
11/22/2011 18:44 D3giX#11
Hä ?!

Das Programm soll ne verbindung zu nem server aufbaun und wie ne Console funktionieren ... sozusagn...

Was meinste mit auf den Server tun ?!

PS: hab herausgefunden das der doch alles auflistet ... man muss halt tausend mal befehl senden klicken dann geht der Zeile pro zeile ab .... kann man das iw. machn das der das direkt da rein schreibt ?!
11/22/2011 20:20 warfley#12
es müsste so gehen, garantiere aber für nichts, hab schon ewig nichts mehr mit vb gemacht

PHP Code:
Dim t As New Net.Sockets.TcpClient
        Dim a 
As Integer t.Available
        Dim b
(a) As Byte
        t
.GetStream.Read(bt.GetStream.Positiona
11/23/2011 17:48 D3giX#13
geht nicht ... dann hat das proggi keine rückmeldung mehr
11/24/2011 23:33 warfley#14
Multithreading, in einem thread zeilenweise aus stream lesen, in einem weiteren das gelesene verwenden , und im gui thread mit dem interface kommunizieren
11/25/2011 16:44 Jopsi332#15
Quote:
Originally Posted by warfley View Post
Multithreading, in einem thread zeilenweise aus stream lesen, in einem weiteren das gelesene verwenden , und im gui thread mit dem interface kommunizieren
funktioniert nicht wenn der client eine konsolen anwendung ist und die .vb eine form