После нескольких дней борьбы я решил проблему.Основная ошибка была с переадресацией портов.Я бы рекомендовал использовать SSH.Net от Renci (была ошибка алгоритма с Tamir ssh).После создания ssh-соединения я использовал это для переадресации:
var port = new ForwardedPortLocal(localIP, localPort, "localhost", remotePort);
Проверьте ваш локальный IP с помощью ipconfig / all в cmd.Или используйте 127.0.0.1 в качестве петлевого IP.SimpleMLLPClient не работал для меня, поэтому я использовал прямой запрос клиента tcp.Примерно так:
TcpClient ourTcpClient = new TcpClient();
ourTcpClient.Connect(localIP, (int)localPort);
NetworkStream networkStream = ourTcpClient.GetStream();
var sendMessageByteBuffer = Encoding.UTF8.GetBytes(testHl7MessageToTransmit.ToString());
if (networkStream.CanWrite)
{
networkStream.Write(sendMessageByteBuffer, 0, sendMessageByteBuffer.Length);
Console.WriteLine("Data was sent to server successfully....");
byte[] receiveMessageByteBuffer = new byte[ourTcpClient.ReceiveBufferSize];
var bytesReceivedFromServer = networkStream.Read(receiveMessageByteBuffer, 0, receiveMessageByteBuffer.Length);
if (bytesReceivedFromServer > 0 && networkStream.CanRead)
{
receivedMessage.Append(Encoding.UTF8.GetString(receiveMessageByteBuffer));
}
var message = receivedMessage.Replace("\0", string.Empty);
Console.WriteLine("Received message from server: {0}", message);
}
Таким образом, он дал мне мгновенный ответ с 0 байтами (без истечения времени ожидания).И тут приходит помощь Амит Джоши.Я использовал запрос, который он предложил с START_OF_BLOCK, CARRIAGE_RETURN и END_OF_BLOCK, и наконец начал работать.Спасибо, Амит Джоши!
Дополнительная информация: В Android (Java / Kotlin) сеанс jsch setPortForwardingL отлично работает с тремя параметрами:
val session = jsch.getSession("user", sshIP, sshPort)
session.setPassword("")
jsch.addIdentity(privatekey.getAbsolutePath())
// Avoid asking for key confirmation
val prop = Properties()
prop.setProperty("StrictHostKeyChecking", "no")
session.setConfig(prop)
session.connect(5000)
session.setPortForwardingL(localForwardPort, "localhost", remotePort)
val useTls = false
val context = DefaultHapiContext()
connection = context.newClient("localhost", localForwardPort, useTls)