|
|
|
проблема с jsch и выполнением unix комманд из java
|
|||
|---|---|---|---|
|
#18+
Добрый день. вот есть небольшой участок кода, где я подключаюсь к linux и запускаю выполнение unix-команд: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. Не происходит выход из внешнего цикла. Из внешнего цикла мы выходим, когда канал закрыт. При этом сначала in.available() - возвращает положительные значения, а в какой - то момент 0. По ответам в гугле не смог понять, почему начинает возвращать 0. В доке написано, что available() для inputstream - всегда возращает 0. http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html#available() Поправьте, плиз, меня в чем я ошибаюсь, и в этом ли вообще дело, что цикл у меня бесконечным получается, может ещё на что мледует обратить внимание? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2015, 11:12 |
|
||
|
проблема с jsch и выполнением unix комманд из java
|
|||
|---|---|---|---|
|
#18+
mr_virtus, Эта такая особенность сокетов вообще. Другая сторона может даже закрыть соединение, но ты об этом не узнаешь пока не попробуешь читать или писать. И метод isClosed() тут вообще не помошник. На сколько я понимаю, самый правильный вариант это привязка к протоколу. То есть определять конец сессии можно по содержимому. Можно использовать таймаут. Если в течении какого-то времени ничего нового не появилось, значит и не появится. Если вопрос вообще только в закрытии, то отправляй команду закрытия и сам смело закрывай соединение. Для чего ждать сервер-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2015, 11:45 |
|
||
|
проблема с jsch и выполнением unix комманд из java
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, а как мне команду отправить? у меня на linux машине выполняются разные команды, shell скрипты запускаются(эти команды я предварительно отправляю из java кода на сервак). и когда они все выполнятся, я добавляю Код: java 1. это и закрывает канал в моем случае. Ещё интересный момент, который я тоже не понимаю. В доке написано: http://epaul.github.io/jsch-documentation/javadoc/com/jcraft/jsch/Channel.html#getInputStream() авторpublic InputStream getInputStream() я написал такую штуку: Код: java 1. 2. и получил авторcom.jcraft.jsch.Channel$MyPipedInputStream Это же не InputStream. Почему так или я неправильно что понимаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2015, 11:54 |
|
||
|
проблема с jsch и выполнением unix комманд из java
|
|||
|---|---|---|---|
|
#18+
так про авторcom.jcraft.jsch.Channel$MyPipedInputStream понял. MyPipedInputStream - наследник InputStream. про available так и нет пока :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2015, 12:14 |
|
||
|
проблема с jsch и выполнением unix комманд из java
|
|||
|---|---|---|---|
|
#18+
mr_virtusпро available так и нет пока :) JavaDoc прочитай. Вдумчиво. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2015, 12:36 |
|
||
|
проблема с jsch и выполнением unix комманд из java
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, я вот не пойму. где мне читать про метод available для MyPipedInputStream? http://www.docjar.com/docs/api/com/jcraft/jsch/Channel$MyPipedInputStream.html Как он работает? Или в исходники нужно лезть? Подскажите, плиз :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2015, 15:51 |
|
||
|
проблема с jsch и выполнением unix комманд из java
|
|||
|---|---|---|---|
|
#18+
mr_virtus, Странные у тебя желания http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html#available() Returns an estimate of the number of bytes that can be read (or skipped over) from this input stream without blocking by the next invocation of a method for this input stream. The next invocation might be the same thread or another thread. A single read or skip of this many bytes will not block, but may read or skip fewer bytes. Note that while some implementations of InputStream will return the total number of bytes in the stream, many will not . It is never correct to use the return value of this method to allocate a buffer intended to hold all data in this stream. A subclass' implementation of this method may choose to throw an IOException if this input stream has been closed by invoking the close() method. The available method for class InputStream always returns 0. This method should be overridden by subclasses. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2015, 15:54 |
|
||
|
|

start [/forum/topic.php?fid=59&tid=2125940]: |
0ms |
get settings: |
11ms |
get forum list: |
21ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
182ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
28ms |
get tp. blocked users: |
1ms |
| others: | 250ms |
| total: | 513ms |

| 0 / 0 |
