title: "The Transport Protocol thread failed" – "The socket is EOF" with J2SSH connection using Java
body: <p>I am trying to establish an SSH connection through my Java code, but getting below exception .. I tested my connection through Putty/Winscp tools and it works fine. The problem is with my Java code...</p>
  
  <pre><code>SEVERE: The Transport Protocol thread failed
  java.io.IOException: The socket is EOF
      at com.sshtools.j2ssh.transport.TransportProtocolInputStream.readBufferedData(Unknown Source)
      at com.sshtools.j2ssh.transport.TransportProtocolInputStream.readMessage(Unknown Source)
      at com.sshtools.j2ssh.transport.TransportProtocolCommon.readMessage(Unknown Source)
      at com.sshtools.j2ssh.transport.kex.DhGroup1Sha1.performClientExchange(Unknown Source)
      at com.sshtools.j2ssh.transport.TransportProtocolClient.performKeyExchange(Unknown Source)
      at com.sshtools.j2ssh.transport.TransportProtocolCommon.beginKeyExchange(Unknown Source)
      at com.sshtools.j2ssh.transport.TransportProtocolCommon.onMsgKexInit(Unknown Source)
      at com.sshtools.j2ssh.transport.TransportProtocolCommon.startBinaryPacketProtocol(Unknown Source)
      at com.sshtools.j2ssh.transport.TransportProtocolCommon.run(Unknown Source)
      at java.lang.Thread.run(Unknown Source)
  </code></pre>
  
  <p>Below is my piece of Java code to establish the connection </p>
  
  <pre><code>public class MySSHClient {
  
    static SshClient ssh = null;
    static SshConnectionProperties properties = null;
    SessionChannelClient session = null;
  
    private static void MySSHClient(String hostName, String userName, String passwd )
    {
  
      try
      {
        // Make a client connection
        ssh = new SshClient();
        properties = new SshConnectionProperties();
        properties.setHost("192.168.1.175");
  
        // Connect to the host
        ssh.connect(properties, new IgnoreHostKeyVerification());
  
        // Create a password authentication instance
        PasswordAuthenticationClient pwd = new PasswordAuthenticationClient();
  
        pwd.setUsername("root");
        pwd.setPassword("123456");
  
        // Try the authentication
        int result = ssh.authenticate(pwd);
  
        // Evaluate the result
        if (result==AuthenticationProtocolState.COMPLETE) {
  
          System.out.println("Connection Authenticated");
        }
      }
      catch(Exception e)
      {
        System.out.println("Exception : " + e.getMessage());
      }
  
    }//end of method.
  
  
    public String execCmd(String cmd)
    {
      String theOutput = "";
      try
      {
        // The connection is authenticated we can now do some real work!
        session = ssh.openSessionChannel();
  
        if ( session.executeCommand(cmd) )
        {
          IOStreamConnector output = new IOStreamConnector();
          java.io.ByteArrayOutputStream bos =  new
          java.io.ByteArrayOutputStream();
          output.connect(session.getInputStream(), bos );
          session.getState().waitForState(ChannelState.CHANNEL_CLOSED);
          theOutput = bos.toString();
        }
        //else
        //throw Exception("Failed to execute command : " + cmd);
        //System.out.println("Failed to execute command : " + cmd);
      }
      catch(Exception e)
      {
        System.out.println("Exception : " + e.getMessage());
      }
  
      return theOutput;
    }
  
    public static void main(String[] args){
        MySSHClient(null, null, null);
      }
  </code></pre>