.
Anmeldung | Registrieren | Hilfe
in Suchen
Home Foren News Member Offers Termine Developer Blogs Knowledge Base
dotnet-forum.de » .NET-Entwicklung » Netzwerktechnologien » Socket sendet nicht alle Bytes

Socket sendet nicht alle Bytes

Letzter Beitrag 12. Feb 2010 23:35 von Thomas Ritter. 4 Antworten.
Seite 1 von 1 (5 Treffer)
Beiträge sortieren: Zurück Weiter
  • 08. Feb 2010 21:20

    • Thomas Ritter
    • Top 50 Mitwirkender
      Männlich
    • Registriert am 10. Mrz 2008
    • 27367 Sottrum
    • Beiträge 43
    • Punkte 620

    Socket sendet nicht alle Bytes

    Antworten Kontakt

    Hallo, ich mal wieder mir einem Problem:

    ich habe einen IPS1 IP-Switch und dieser besitzt einen Telnet-Server.
    Der soll per Software geschaltet werden.
    Die Socket-Verbindung klappt, auch die Rückmeldung ist ok,
    das EIN- und AUS-Schalten mittels send 'E' und send 'A' funktioniert auch

    nur den Beutzername 'admin' senden wird immer nur das 'a' gesendet und nicht bytesSent.

    Was ist hier falsch?

    Private Sub SocketSendReceive(ByVal Text As String)

    'Einschalten: Text=E, Ausschalten: Text=A, Benutzername: Text=admin

    Dim ascii As Encoding = Encoding.ASCII
    Dim request As String = Text
    Dim bytesSent As [Byte]() = Encoding.ASCII.GetBytes(request & vbCrLf)
    Dim bytesReceived(255) As [Byte]

    Dim Telnet As Socket = Connect(server, port)

    Telnet.Send(bytesSent, bytesSent.Length, SocketFlags.None)

    Application.DoEvents()

    Dim bytes As Int32
    Dim page As [String] = ""

    Do
    bytes = Telnet.Receive(bytesReceived, bytesReceived.Length, 0)
    page = page + Encoding.ASCII.GetString(bytesReceived, 0, bytes)
    Loop While bytes = 256

    Me.TextBox1.Text &= page
    End Sub

    • IP-Adresse ist Registriert
  • 11. Feb 2010 21:03 Antwort zu

    • Thomas Ritter
    • Top 50 Mitwirkender
      Männlich
    • Registriert am 10. Mrz 2008
    • 27367 Sottrum
    • Beiträge 43
    • Punkte 620

    Socket sendet nicht alle Bytes

    Antworten Kontakt

    Ich habe noch eine seltsame Geschichte endeckt,

    ich habe den Code geändert und statt 'Socket' TCPClient verwendet.
    wenn ich nun eine Verbindung herstelle und die Bytes einzeln sende,

    stream.WriteByte(13)
    stream.WriteByte(10)

    sendet der client beide Bytes

    will ich nun den Username 'admin' senden
    stream.WriteByte(97) '=a
    stream.WriteByte(100) '=d
    stream.WriteByte(109)
    stream.WriteByte(105)
    stream.WriteByte(110)
    wird nur das erste Byte übertragen.
    Könnte es auch sein, das der Fehler im 'Telnet.Receive' liegt?

    Wenn ich die Sub SocketSendReceive für jeden Buchstaben einzeln starte und nach jedem Buchstaben einen vbcrlf als Bytes sende funktioniert die eingabe des Usernamens und es kommt vom TelNet-Server die Abfrage für das Passwort.

    was läuft hier falsch?

    Gruß

    Thomas

     

    • IP-Adresse ist Registriert
  • 12. Feb 2010 15:47 Antwort zu

    • Thomas Ritter
    • Top 50 Mitwirkender
      Männlich
    • Registriert am 10. Mrz 2008
    • 27367 Sottrum
    • Beiträge 43
    • Punkte 620

    Socket sendet nicht alle Bytes

    Antworten Kontakt

    Hiiilfe,

    ich habe mir ein SocketTool (.dll) und einen BeispielCode herunter geladen.
    auch hier sendet das Socket nur ein einziges Byte
    Telnet.Send(bytesSent, bytesSent.Length, SocketFlags.None)
    obwohl 5 Bytes in dem Array enthalten sind.
    Dies beweist mir, dass mein Code nicht ganz falsch ist, sondern das Problem am Telnet-Server liegt.

    Sende ich nun per KeyPress jeden Buchstaben einzeln, so funktioniert die Eingabe des Usernamens und des Passwortes.

    Ich habe die Vermutung, das nach dem Send(Byte()) eine Pause eingebaut werden muss, oder der Telnet-Server abgefragt werden muss, ob er ein Byte erhalten hat.

    wenn ich im TCPClient
    Telnet.Write("a")
    For I as int32 = 0 To 300000
    Next
    Telnet.Write("d")
    For I usw.
    eingebe, werden alle 5 Bytes an den Server gesendet.
    Dies kann aber nicht des Rätsels Lösung sein.[:'(]

    Weis denn Jemand hier abhilfe?

    Gruß
    Thomas


     

    • IP-Adresse ist Registriert
  • 12. Feb 2010 19:54 Antwort zu

    • Timo Rehl
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 05. Mai 2009
    • Wald-Michelbach
    • Beiträge 534
    • Punkte 9.115
    • Moderator

    Socket sendet nicht alle Bytes

    Antworten Kontakt
    Hallo Thomas,

    ich habe so gewisse Verständnisprobleme, deshalb hier mal nachgefragt:
    - Was für eine Telnet-Klasse ist das überhaupt? Ist diese von der Codeplex Seite und unter diesem Link zu finden?
    - Kann das sein, dass ein Telnet.Write() ein asynchroner Vorgang ist, der Bytes an den TelnetServer sendet, und dass dann ein direkter weiterer Sendevorgang fehlschlägt, weil Server noch bei der Bearbeitung des ersten Bytes?
    - Wieso sendest Du einmal Bytes, und dann arbeitest Du mit Streams, ich dachte Du hast hier eine Socket-Verbindung?

    Entschuldige bitte die vielen Fragen, vielleicht kommen wir auf Deine Problemursache...

    Grüße
    Timo

    - theres no place like 127.0.0.1 -
    • IP-Adresse ist Registriert
  • 12. Feb 2010 23:35 Antwort zu

    • Thomas Ritter
    • Top 50 Mitwirkender
      Männlich
    • Registriert am 10. Mrz 2008
    • 27367 Sottrum
    • Beiträge 43
    • Punkte 620

    Socket sendet nicht alle Bytes

    Antworten Kontakt

    Hallo Timo,
    erst einmal vielen Dank für Deine Hilfsbereitschaft. Wer eine vernünftige Antwort erwartet muss auch vernünftig Fragen beantworten.

    Das SocketTool habe ich von Catalyst (.com) und kann es für alle nur wärmstens empfehlen. Doch leider hat das Tool das gleiche Problem.
    das mit dem TCPClient war ein Versuch aus reiner Verzweiflung, welcher jedoch zu dem gleichen Ergebniss geführt hat.

    Einzelne Bytes sind nicht das Problem, aber beim Username und Passwort akzeptiert der TelNet-Server nur max. 2 Bytes, also z.B: vbcrlf (1310)

    Der Telnet-Server ist ein IP-Switsch und in der Beschreibung steht, dass die Kurzbefehle in einzelnen Bytes durch Semikolon getrennt übertragen werden. Also zum Einschalten und nach 12 Minuten und 30 Sekunden automatisch aus:
    'E' 0x00 0x0C 0x1E

    Im Moment habe ich das Problem mitels einer For-Schleife gelöst, welche jedoch keine saubere programmierung darstellt:

    Dim User As String = "admin"
    Dim result As String = String.Empty
    For I As Integer = 0 To User.Count - 1
    SocketSendReceive1(User.Substring(I, 1), tempSocket)
    Next
    SocketSendReceive1(vbCrLf, tempSocket)
    result = SocketSendReceive1(vbCrLf, tempSocket)
    result = SocketSendReceive1(
    "E", tempSocket)
    result = SocketSendReceive1(
    "", tempSocket)
    result = SocketSendReceive1(
    "X", tempSocket)
    result = SocketSendReceive1(vbCrLf, tempSocket)
    tempSocket.Disconnect(
    False)

    Private Shared Function SocketSendReceive1(ByVal _Text As String, ByVal S1 As Socket) As String
    Dim request As String = _Text
    Dim bytesSent As [Byte]() = Encoding.UTF8.GetBytes(request & vbCrLf)
    Dim bytesReceived(255) As [Byte]
    S1.Send(bytesSent, bytesSent.Length, SocketFlags.None)
    Dim bytes As Int32
    Dim page As [String] = ""
    Do
    bytes = S1.Receive(bytesReceived, bytesReceived.Length, SocketFlags.None)
    page = page + Encoding.ASCII.GetString(bytesReceived, 0, bytes)
    Loop While bytes = 256
    Return page
    End Function

    Auch wenn ich durch eine Textbox die Keycode direkt einzeln sende geht alles, nur, ich muss das alles automatisch haben, also ohne dass der User sein Name und Passwort per Tastatur eingibt.

    Weist Du eine Lösung für das Problem?

    Gruß

    Thomas

     

    • IP-Adresse ist Registriert
Seite 1 von 1 (5 Treffer)
Das Team | Regeln | Impressum
Aktuelle Beiträge aus dem dotnet-forum.de