我与IBM i(AS / 400)建立了连接,该连接通过称为TN5250的协议/编码进行通信。我无法将其与任何编码listed here匹配;如何将该文本转换为可以使用的内容? UTF8,ASCII; Windows友好的文本格式的任何内容都可以。它不得涉及购买第三方库。

这是我在其他地方找到的一些“有效”代码。 “地址”是IP地址。

        Socket SocketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        System.Net.IPEndPoint remoteEndPoint = new System.Net.IPEndPoint(IPAddress.Parse("address"), 23);
        SocketClient.Connect(remoteEndPoint);
        byte[] buffer = new byte[10];
        textBox1.Text += Receive(SocketClient, buffer, 0, buffer.Length, 10000).Trim() + "\r\n";
    }
    public static string Receive(Socket socket, byte[] buffer, int offset, int size, int timeout)
    {
        int startTickCount = Environment.TickCount;
        int received = 0;  // how many bytes is already received
        do
        {
            if (Environment.TickCount > startTickCount + timeout)
                throw new Exception("Timeout.");
            try
            {
                received += socket.Receive(buffer, offset + received, size - received, SocketFlags.None);
                return Encoding.GetEncoding(37).GetString(buffer, 0, buffer.Length);
                //byte[] buf = Encoding.Convert(Encoding.GetEncoding("iso-8859-1"), Encoding.UTF8, buffer);
                //return Encoding.GetEncoding("IBM500").GetString(buf, 0, buffer.Length);
            }
            catch (SocketException ex)
            {
                if (ex.SocketErrorCode == SocketError.WouldBlock ||
                    ex.SocketErrorCode == SocketError.IOPending ||
                    ex.SocketErrorCode == SocketError.NoBufferSpaceAvailable)
                {
                    // socket buffer is probably empty, wait and try again
                    Thread.Sleep(30);
                }
                else
                    throw ex;  // any serious error occurr
            }
        } while (received < size);
        return "";
    }


这是Telnet连接。在Windows telnet窗口中工作正常。我真正想要的解决方案是一种从telnet会话捕获stdout的方法,但是很显然,像Telnet这样的终端程序不会写入stdout。

最佳答案

TN5250J项目是使用Java编写的有效的TN5250客户端。

TN5250是基于Telnet的IBM协议。它适用于IBM中端系列“哑”绿屏终端。该系列是块模式,这意味着主机通过一次传输将完整的显示面板发送给客户端,而客户端通过一次传输将完整的显示面板发送回主机。这与逐字符传输相反。

作为一个非常高级的概述,5250协议描述了如何格式化显示(开始/停止字段,下划线和颜色之类的字段属性)以及可接受的功能键。客户端需要了解这些格式化说明,以便正确呈现来自主机的数据。同样,客户端不会发送回完整的显示面板,包括常量和格式;相反,它将发送回具有输入能力的字段。

本身没有标准输出;可读的显示面板需要客户端渲染。通过使用Wireshark捕获数据包并将它们与显示相同事务的实际TN5250显示器进行比较,您可能会对原始数据有很好的了解。

10-06 08:58