新城@筑波大学情報です。こんにちは。

In article <m3he1a5q9j.fsf@maedapc.cc.tsukuba.ac.jp>
        maeda-news@ialab.is.tsukuba.ac.jp writes:
> > % java -classpath ../jsch-0.1.8/src:./src com.jcraft.jcterm.JCTerm
> > java.lang.ClassNotFoundException: com.jcraft.jsch.jce.Random
> ./src/com/jcraft/jsch/jch/Random.class は存在するのでしょうか?

あ、これは存在しませんでした。javac com/jcraft/jsch/*.java 
はしたのですが、その子供までは javac していませんでした。そ
の部分を javac *java して Random.class を作るとRandom 云々の
エラーは消えましたが、状況はあまり変りません。

In article <m3llqm5qr1.fsf@maedapc.cc.tsukuba.ac.jp>
        maeda-news@ialab.is.tsukuba.ac.jp writes:
> (2) HostBasedAuthenticationをしようとして,特権ポートがbindできない.

root でやってみても、この通りです。メニューから接続に行くと
こうなります。
------------------------------------------------------------
# java -classpath ../jsch-0.1.8/src:./src com.jcraft.jcterm.JCTerm
java.net.BindException: Can't assign requested address
        at java.net.PlainSocketImpl.socketBind(Native Method)
        at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:331)
        at java.net.Socket.bind(Socket.java:472)
        at java.net.Socket.<init>(Socket.java:289)
        at java.net.Socket.<init>(Socket.java:119)
        at com.jcraft.jsch.Session.connect(Session.java:165)
        at com.jcraft.jcterm.JCTerm.run(JCTerm.java:216)
        at java.lang.Thread.run(Thread.java:554)
------------------------------------------------------------

この部分のソース・プログラムを見てみました。
------------------------------------------------------------
  public void connect() throws JSchException{
...
      if(proxy==null){
...
        if(socket_factory==null){
          if(timeout==0){
165:        socket=new Socket(host, port);
          }
          else{
...
            new Thread(new Runnable(){
                    sockp[0]=new Socket(host, port);
...
------------------------------------------------------------
まあ普通ですよね。しかし、上のバックとレースを見ると、
Socket() (クライアント側)なのに、bind しているということにな
ります。何か変な感じ。サーバ側なら bind は、必須として
クライアント側ではやらなくてもいいはずなのに。

ktrace で確認するとたしかに bind(2) していました。
------------------------------------------------------------
  2313 java     CALL  socket(0x1e,0x1,0)
  2313 java     RET   socket 11/0xb
  2313 java     CALL  listen(0xb,0x1)
  2313 java     RET   listen -1 errno 49 Can't assign requested address
  2313 java     CALL  close(0xb)
  2313 java     RET   close 0
  2313 java     CALL  socket(0x1e,0x1,0)
  2313 java     RET   socket 11/0xb
  2313 java     CALL  bind(0xb,0xf06bc560,0x1c)
  2313 java     RET   bind -1 errno 49 Can't assign requested address
  2313 java     CALL  shutdown(0xb,0x2)
  2313 java     RET   shutdown 0
  2313 java     CALL  close(0xb)
  2313 java     RET   close 0
  2313 java     CALL  write(0x2,0xf06b8160,0x36)
  2313 java     GIO   fd 2 wrote 54 bytes
       "java.net.BindException: Can't assign requested address"
  2313 java     RET   write 54/0x36
------------------------------------------------------------

> examples/READMEによると,CLASSPATHの設定が必要みたいですが,これは行なっ
> てみましたでしょうか?

java -classpath ではなくて setenv しても同じでした。
なんなんでしょうね。

\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報       \\