2011-01-27 5 views
0

Мне было интересно, есть ли способ открыть трубку между сервером java и bash tcp pipe. Если да, то как бы вы это сделали. Я знаю, как настроить серверную часть java, но как открыть соединение сокета через bash или даже приглашение Windows cmd. В принципе, я хочу подключить стандартный вход к подключению tcp и получить от него стандартный вывод.Java Serversocket and Bash Connection

Любые примеры, связанные с этим!

-TJ

ответ

0

ServerSocket не может сделать что-либо ожидать, принимать входящие соединения, а также создавать новые сокеты, которые вы используете в качестве конечных точек (не использовать ServerSocket для любых отправляющих или ПРИЕМА операций). Это нормально, но имейте в виду, какая сторона соединения должна принимать соединения. Я бы предположил, что это будет Bash, поскольку это похоже на «собственный» канал, поэтому вместо этого вы должны использовать Socket и подключить его.

+0

Я бы воспользовался гнездом после приема соединения на серверном сокете, который поймал бы запрос из bash, а затем вернет сокет, который будет использоваться для связи. Я в основном задаюсь вопросом, как и если вы можете запросить tcp-соединение из командной строки bash/windows cmd, и если да, то как это сделать. Спасибо Tho :) –

0

Используйте любой из SSH инструментов (есть куча opensources, например, ganymade) Ref:

http://java-source.net/open-source/network-clients/ganymed-ssh-2-for-java

Я не использовал этот конкретный один, но другие SSH клиенты делать то, что вы хотите.

PS: Для этого вам действительно не нужен ServerSocket, но полезно использовать потоки.

+0

без serverocket Как улавливать входящее соединение? –

+0

Написал вам другой ответ, содержащий исходный код ... –

0

Netcat обычно используется для открытия TCP-соединений из оболочки Unix. Bash (или любая другая оболочка, о которой я знаю) не поддерживает ее напрямую. Кажется, существует и порт Windows Netcat, но я его не использовал.

Но лучше всего использовать SSH, поскольку в этом случае на стороне Java не требуется специальная настройка - вы просто получите свои стандартные потоки ввода-вывода, перенаправленные на SSH-клиент, автоматически, с бесплатным шифрованием и необязательное сжатие (ssh-C) в качестве бонусов. Недостаток заключается в том, что для его установки потребуется SSH-сервер на стороне Java и SSH-клиент на стороне соединения.

0

Ниже приведен пример - классы Connection, Session и т. Д. Определены в импорте. В то время мы использовали trilead SSH, и я не думаю, что он доступен публично больше, но вы можете найти много других библиотек в Интернете, например, http://linuxmafia.com/ssh/java.html

Дело в том, что мы не имеем открыть серверный сервер, чтобы (1) установить сеанс SSH, (2) выполнить аутентификацию паролем, (3) запустить некоторую команду в оболочке входа пользователя и (4) захватить ее stdout. Я считаю, что большинство библиотек SSH предоставят вам эту функциональность. Надеюсь на эту помощь, - М.С.

public void runCommand (String uName, String pWord, String cmd) throws Exception { 

    Connection conn = new Connection ("localhost"); 
    conn.connect(); 
    boolean authenticated = conn.authenticateWithPassword (uName, pWord); 

    if (!authenticated) 
     throw new Exception ("Authentication failure"); 
    Session sess = connection.openSession(); 
    sess.execCommand (cmd); 

    BufferedReader br = new BufferedReader (new InputStreamReader (
       new StreamGobbler (sess.getStdout()))); 

    for (String s = br.readLine() ; s != null ; s = br.readLine()) { 
      // do stuff with s 
    } 
    br.close(); 
    sess.close(); 
    conn.close(); 
}