У меня есть соединение с IBM i (AS / 400), которое связывается по протоколу / кодировке TN5250.Я не смог сопоставить его ни с одной из кодировок , перечисленных здесь ;Как я могу преобразовать этот текст в то, что я могу использовать?UTF8, ASCII;все в текстовом формате, дружественном к Windows, подойдет.Это не должно включать покупку сторонней библиотеки.
Вот некоторый «рабочий» код, который я нашел в другом месте.«address» - это 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, но, очевидно, терминальные программы, такие как Telnet, не записывают в стандартный вывод.