Tutorial - Wie stelle ich eine Verbindung nach Telnet her ?

    • VB.NET

    Es gibt 33 Antworten in diesem Thema. Der letzte Beitrag () ist von nikeee13.

      Tutorial - Wie stelle ich eine Verbindung nach Telnet her ?

      Erweiterung für TS³:

      Hallo Leute,
      Ich habe mir mal gedacht das ich noch eine Erweiterung mache des Tutorial´s dies mal wird es über Teamspeak³ gehen.
      Wie man eine Verbindung von Programm zu Server (in dem Fall TS3) und von Server zu Programm.


      Fangen wir mal leicht an wie schon im ersten teil brauch man immer ein Verbindung´s Callback.

      Dazu macht ihr einer unter einen Button oder sonst was ihr machen Form_Load, Timer1_Tick usw.

      Eine Verbindung aufbauen das geht soo:

      VB.NET-Quellcode

      1. Dim tcpClient As New System.Net.Sockets.TcpClient()
      2. tcpClient.Connect("Server Adresse", PORT )
      3. Dim networkStream As NetworkStream = tcpClient.GetStream()


      Erklärung :
      Das Dim TCPClient.. ist dafür das eine art Socket Verbindung als TCP Client genannt wird.
      tcpClient.Connect öffnet in dem fall die verbindung dazu wird eine "server adresse und ein port" benötigt.

      Zur Info: TS3 Port + Adresse = IP: 127.0.0.1(Die Ip mit deiner Eigenen Ersätzen) + Port: 10011(Immer gleich!)

      Jetzt haben wir schon die Verbindung offen was nun ??
      Natürlich müssen wir jetzt überlegen was wir machen wollen..
      Im meinen fall wollen wir ein belibigen text einer Textbox in den TS schreiben.

      dazu brauchen wir jetzt erstmal server Query daten einen Virtualen server und Ein wenig Grundwissen.

      VB.NET-Quellcode

      1. Dim sendBytes As [Byte]()
      2. sendBytes = Encoding.ASCII.GetBytes("login serveradmin passwort" + vbCrLf)
      3. networkStream.Write(sendBytes, 0, sendBytes.Length)


      Erklärung:

      Hier loggen wir uns als serverAdmin ein, dazu auch wieder Name + Passwort (wird bei erst installation angegeben.)


      VB.NET-Quellcode

      1. Dim sendBytes As [Byte]()
      2. sendBytes = Encoding.ASCII.GetBytes("use sid=1" + vbCrLf)
      3. networkStream.Write(sendBytes, 0, sendBytes.Length)


      Erklärung:

      Hier wählen wir den Virtuelen Server aus.

      use = benutzen , sid = Serverid.

      wie kriege ich die ServerID raus ?? Einfach auf den Server oben auf serverquery einloggen und "serverlist" eingeben.

      So jetzt haben wir Schon eine Verbindung, Ein Login und die Serverauswahl..

      Jetzt fehlt nur noch der Text den wir übertragen wollen -.-


      VB.NET-Quellcode

      1. Dim sendBytes As [Byte]()
      2. sendBytes = Encoding.ASCII.GetBytes("sendtextmessage targetmode=3 target=7 msg=Test\shaha" + vbCrLf)
      3. networkStream.Write(sendBytes, 0, sendBytes.Length)


      Erklärung :

      Der targetmode und target sind wichtig !

      targetmode gibt an ob es an den server,channel oder clienten gesendet werden soll.
      In meinen Fall ist es der Server mit der Virtuelen ID "7".

      !!!!WICHTIG!!!!

      bei der "msg=" jede "Leertaste" ist bei TS3 ein "\s" also bevor ihr den Text sendet.
      Dim aString As String = Replace(TextBox1.Text, " ", "\s")
      Und dann nicht Textbox1.text senden sondern den "aString".

      zu guter letzt muss man sich auch noch ausloggen.


      VB.NET-Quellcode

      1. Dim sendBytes As [Byte]()
      2. sendBytes = Encoding.ASCII.GetBytes("logout" + vbCrLf)
      3. networkStream.Write(sendBytes, 0, sendBytes.Length)


      Erklärung :

      Ist Logisch oder Einloggen .. Ausloggen ??^^

      Edit by ~blaze~:
      Verschoben in den Sourcecodeaustausch

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „~blaze~“ ()

      lol
      kurz und knapp
      aber zwei Fragen:
      wozu brauch man eine Verbindung zu TelNet ?
      und was ist das oO ?
      Hallo,

      Wir versuchen schon seit Tagen ein Programm zu schreiben. Ziel ist ganz einfach: ein VB-Programm im Prinzip nur ein Textfeld und ein Button.
      Wenn man den Butto drückt, wird der Text aus dem Textfeld an den TS2 gesendet.

      Nach langem suchen haben wir endlich das gefunden was wir brauchen -> Deinen Thread.

      Um ein paar Fehler zu beseitigen, hab ich die Deklarationen (mit Dim beginnend) nach oben gepackt.
      Mäckern tut der dem Begriff "Encoding" den will er als Variable deklarieren.
      Wenn mann das dann (wie empfohlen) in "System.Text.Encoding" ändert, kommt beim debuggen folgende Meldung:
      "Fehler beim Erstellen des Formulars. Weitere Informationen finden sich in Expection.InnerExpection. Fehler: Der Vorgang ist für nicht verbundene Sockets unzulässig.."

      unser Codeausschnitt:

      VB.NET-Quellcode

      1. Public Class Form1
      2. Dim tcpClient As New System.Net.Sockets.TcpClient()
      3. Dim networkStream As Net.Sockets.NetworkStream = tcpClient.GetStream()
      4. Dim sendBytes As [Byte]()
      5. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      6. tcpClient.Connect("DynamischeIP", 8767)
      7. sendBytes = System.Text.Encoding.ASCII.GetBytes("login AdminBenutzername AdminPasswort" + vbCrLf)
      8. networkStream.Write(sendBytes, 0, sendBytes.Length)
      9. sendBytes = System.Text.Encoding.ASCII.GetBytes("use sid=8767" + vbCrLf)
      10. networkStream.Write(sendBytes, 0, sendBytes.Length)
      11. sendBytes = System.Text.Encoding.ASCII.GetBytes("sendtextmessage targetmode=3 target=7 msg=Test\shaha" + vbCrLf)
      12. networkStream.Write(sendBytes, 0, sendBytes.Length)
      13. sendBytes = System.Text.Encoding.ASCII.GetBytes("logout" + vbCrLf)
      14. networkStream.Write(sendBytes, 0, sendBytes.Length)
      Alles das muss in Button 1..


      VB.NET-Quellcode

      1. Dim tcpClient As New System.Net.Sockets.TcpClient()
      2. tcpClient.Connect("Serverip", 51234)
      3. Dim networkStream As NetworkStream = tcpClient.GetStream()
      4. Dim sendBytes As [Byte]()
      5. sendBytes = Encoding.ASCII.GetBytes("slogin superserveradmin password" + vbCrLf)
      6. networkStream.Write(sendBytes, 0, sendBytes.Length)
      7. sendBytes = Encoding.ASCII.GetBytes("sel 8767" + vbCrLf)
      8. networkStream.Write(sendBytes, 0, sendBytes.Length)
      9. sendBytes = Encoding.ASCII.GetBytes("msg Text...." + vbCrLf)
      10. networkStream.Write(sendBytes, 0, sendBytes.Length)
      11. Dim bytes(tcpClient.ReceiveBufferSize) As Byte
      12. networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
      13. Dim returndata As String = Encoding.ASCII.GetString(bytes)

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Kevin“ ()

      Hallo,

      ich hoffe ich bekomme noch eine Antwort;)

      Und zwar möchte ich gerade Testweise die Client-ID über die User-ID(eindeutige ID) ermitteln.
      Das klappt an sich auch. Befehle sind alle richtig, nur wenn ich versuche die Rückgabe auszulesen. Kommt immer nur eine Art Fehlermeldung von Ts3 zurück, dass ich den Befehl "help" für eine Kommandoübersicht eingeben soll.
      Hiermal der Code, vllt kann mir ja einer helfen. An sich geht alles nur, dass er mir nix zurückgibt.

      VB.NET-Quellcode

      1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      2. sendBytes = System.Text.Encoding.ASCII.GetBytes("login user pw" + vbCrLf)
      3. Client.GetStream.Write(sendBytes, 0, sendBytes.Length)
      4. sendBytes = System.Text.Encoding.ASCII.GetBytes("use sid=1" + vbCrLf)
      5. Client.GetStream.Write(sendBytes, 0, sendBytes.Length)
      6. sendBytes = System.Text.Encoding.ASCII.GetBytes("clientgetids cluid=1234567890ß´1234567890 + vbCrLf")
      7. Client.GetStream.Write(sendBytes, 0, sendBytes.Length)
      8. sendBytes = System.Text.Encoding.ASCII.GetBytes("logout" + vbCrLf)
      9. Client.GetStream.Write(sendBytes, 0, sendBytes.Length)
      10. If Client.GetStream.DataAvailable Then
      11. Dim bytes(Client.ReceiveBufferSize) As Byte
      12. Client.GetStream.Read(bytes, 0, CInt(Client.ReceiveBufferSize))
      13. Dim returndata As String = System.Text.Encoding.ASCII.GetString(bytes)
      14. MsgBox(returndata)
      15. End If


      Ich bedanke mich jetzt schonmal

      gruß

      alphamen
      danke habs grade selber grade raußgefunden, für den nächsten:

      einfach nach jedem write ein read setzen, dann liest er dann im endeffekt die Zeile aus die er genau nach dem Befehl ausgibt. Sonst liest er nur die 1. Zeile in meinem Fall.

      VB.NET-Quellcode

      1. Sub TS3()
      2. Dim tcpClient As New System.Net.Sockets.TcpClient()
      3. tcpClient.Connect("tsbb.dyndns.org", 10011)
      4. Dim networkStream As NetworkStream = tcpClient.GetStream()
      5. Dim sendBytes As [Byte]()
      6. sendBytes = Encoding.ASCII.GetBytes("login serveradmin ***1***" + vbCrLf)
      7. networkStream.Write(sendBytes, 0, sendBytes.Length)
      8. sendBytes = Encoding.ASCII.GetBytes("use sid=14" + vbCrLf) '14 = ServerID
      9. networkStream.Write(sendBytes, 0, sendBytes.Length)
      10. Dim AString As String = Replace(Txt, " ", "\s")
      11. sendBytes = Encoding.ASCII.GetBytes("sendtextmessage targetmode=3 target=3 msg = Astring " + vbCrLf) '3 = An alle User senden, 3 = virtuelle ServerID
      12. networkStream.Write(sendBytes, 0, sendBytes.Length)
      13. sendBytes = Encoding.ASCII.GetBytes("logout" + vbCrLf)
      14. networkStream.Write(sendBytes, 0, sendBytes.Length)
      15. End Sub


      ==> Das ist unser Code nur leider sendet er nicht. Ist irgendwo im Code ein Fehler?!

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „themalta“ ()

      Also bei mir mekert er bei Encoding
      Dies soll ich Deklarieren alles andere geht

      *EDIT*
      habs gelöst

      *EDIT 1*
      Wie bekomme ich das Unknown weg und irgendwie bekomme ich es nich hin das der Text an den Server geschickt wird

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Patrick1993“ ()

      Wie schicke ich eine Nachricht an den ganzen Server ??