IBM 3278 Terminalemulation

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von hate_regex.

    IBM 3278 Terminalemulation

    Moin!

    Ich versuche aktuell eine IBM 3278 Terminalemulation zu etablieren.
    Ich versuchte es über eine Winsocks-Anbindung, doch bisher ohne Erfolg.

    Leider habe ich zu dem Thema erfolglos Google bemüht und nichts brauchbares finden können. Mir fehlt ein wenig der Ansatz das Problem anzugehen.

    Vielleicht kann mir jedand bei dem Thema weiterhelfen.

    Vielen Dank!

    VB.NET-Quellcode

    1. Dim tcpClient As New System.Net.Sockets.TcpClient()
    2. tcpClient.Connect("IP.Adress", 23)
    3. Dim networkStream As NetworkStream = tcpClient.GetStream()
    4. If networkStream.CanWrite And networkStream.CanRead Then
    5. 'Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes("Is anybody there")
    6. 'networkStream.Write(sendBytes, 0, sendBytes.Length)
    7. Dim bytes(tcpClient.ReceiveBufferSize) As Byte
    8. networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
    9. ' Output the data received from the host to the console.
    10. Dim returndata As String = Encoding.ASCII.GetString(bytes)
    11. DataReturn.Text = (("Host returned: " + returndata))
    12. Else
    13. If Not networkStream.CanRead Then
    14. MsgBox("write-error")
    15. tcpClient.Close()
    16. Else
    17. If Not networkStream.CanWrite Then
    18. MsgBox("read-error")
    19. tcpClient.Close()
    20. End If
    21. End If
    22. End If


    Damit bekomme ich prinzipiell einen Connect.
    Jedoch bekomme ich nicht die Daten zurück, die ich erwarten würde.
    Öffne ich die Verbindung über einen 3278-Terminalemulator, gibts nach dem Connect-String eine ASCII-Rückgabemaske.
    Ich vermute ich encodiere irgendetwas völlig falsch, oder muss zusätzlich noch 3278-konforme Requests senden.

    Ich steh wirklich auf dem Schlauch.
    3278 ist ein EBCDIC-Terminal
    Und das ist nicht die einzige Falle.

    Du kannst dir mal das Handbuch über den 3270-Datenstrom anschauen und dir dann überlegen, ob du immer noch einen Emulator schreiben möchtest. ;)

    Aber es gibt ein OpenSource-Projekt zum Thema Telnet3270, das du einbinden könntest:
    open3270.codeplex.com/
    Aber auch da solltest du das Verständnis mitbringen, wie so ein Blockmode-Terminal arbeitet.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

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

    Vielen Dank für die Info! Das bringt mich schonmal weiter..

    Leider gibt es zu dem Projekt auf Codeplex (noch) keinen Download der Libary.

    Ich bin davon ausgegangen, dass es sich um eine simple Telnet-Verbindung handelt, die sich mit spezifischen Encoding und 3278-üblicher Semantik ansprechen lässt.

    Pah, da hab ich wohl mal nen Griff ins Klo gelandet :(

    Edit:
    Ok, mal dumm gefragt. EBCDIC-Konvertierung ist ja nun kein wirkliches Problem. Demnach müsste es doch eine poplige Telnet-Verbindung sein mit EBCDIC-Encoding, oder? Stellt sich nur die Frage, ob die 3278 (bzw. die Verbindungsart) nach dem Connect ein initiales Handshake (irgendwie?) erwartet.

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

    hate_regex schrieb:

    Leider gibt es zu dem Projekt auf Codeplex (noch) keinen Download der Libary.
    Aber es gibt eine fertiges Visual-Studio-Projekt in C# (Download klicken).
    Das brauchst du nur in dein Visual Studio reinziehen und kompilieren.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Aber es gibt eine fertiges Visual-Studio-Projekt in C# (Download klicken).
    Das brauchst du nur in dein Visual Studio reinziehen und kompilieren
    Danke für den Hinweis, ich habe es gefunden.
    Jetzt muss ich leider dennoch nachfragen: Reinziehen und kompilieren. Hm, ich verwende VB.NET. Von C# habe ich keine Ahnung. Wie kann ich das mit VB nutzbar machen? Die übergeordnete .sln-Datei wird mir als fehlerhaft ausgewiesen und kann nicht geladen werden. Leider habe ich noch nie eine Klassenbibliothek kompiliert.

    .. oder wärst du so freundlich mir die nötige .dll zu kompilieren?

    Danke!

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

    So, ich habs nun soweit auch ohne die C# Bibliothek.
    Jetzt habe ich jedoch ein paar Fragen:

    Nach dem Decoding von EBCDIC bekomme ich Code zurück, der (ich nenne es mal) Steuerzeichen enthält.
    Gibt es eine Liste, welche mir die einzelnen Steuercodes auflistet, oder sind diese nicht normiert?

    Kann mir jemand in Kürze erklären, wie ich Sprungmarken innerhalb der Telnet-Maske anspringe (bsw. Textfelder ausfüllen).
    Ich übergebe aktuell die nötigen Informationen byteweise in den Socketstream, was aber auf Dauer keine Lösung darstellen kann.

    Wie handle ich die zu sendenden Daten in einem validen und einfachen, sowie übersichtlichen Format?