How to implement send and receive hl7 data in .NET in ssh connection

前端 未结 2 386
粉色の甜心
粉色の甜心 2021-01-16 09:52

I\'m implementing an application in .Net. I have to create a connection by SSH which is works, but the HL7 data receiving fails. The destination is a raspberry pi. So when I

2条回答
  •  无人共我
    2021-01-16 10:35

    After days of struggling I have solved the problem. The main error was with the port forwarding. I would reccomend to use SSH.Net by Renci (There was algorithm error with Tamir ssh). After ssh connection created I used this to port forward:

               var port = new ForwardedPortLocal(localIP, localPort, "localhost", remotePort);
    

    Check your localIP with ipconfig /all in cmd. Or use 127.0.0.1 as a loopback IP. SimpleMLLPClient did not worked for me so I used the direct tcp client query way. Like this:

                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);
                }
    

    So it gave me instant answer with 0 bytes (not due timeout). And here comes Amit Joshi help. I used a query what he suggested with START_OF_BLOCK, CARRIAGE_RETURN and END_OF_BLOCK and finally started to work. Thank you Amit Joshi!

    Additional info: In Android (java/Kotlin) jsch session setPortForwardingL works fine with three params:

            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)
    

提交回复
热议问题