ラベル Server の投稿を表示しています。 すべての投稿を表示
ラベル Server の投稿を表示しています。 すべての投稿を表示

2015年11月4日水曜日

java.net.BindException: Address already in use: bind

【エラー】
glassfish起動時に発生。(アプリケーションは起動した)
java.net.BindException: Address already in use: bind
【概要】
起動時に使おうとしたポートが既に別アプリにて使用中。
他のアプリを停止する。
他に動いてなくてもたまに出る?
エラーは出てもアプリケーションは起動した。
【詳細】
サンプルコード
a
b
c
【残課題】

2011年2月8日火曜日

http.confの設定 cgiを動かしたい!

【事件】
あるWEBサーバー(A)に置いてあるexeをキックして(http: //~/hoge.exe)実行しようと、そのパスをクライアントから呼び出してみたところダウンロードの処理が走ってしまう(exeを実行できない)という事象が発生。

http.confを色々探ってみたところ、LoadModule cgi_module "C:/~/mod_cgi.so"
という一文がない為に、cgiの実行ができなかった模様で、これを追加するとダウンロード処理ではなくexeを実行する処理が走りました。

で、一旦解決はしたんですが、
その他の同じような環境(B)のhttp.confを確認してみたところ、それっぽい記載は「LoadModule cgi_module "C:/~/mod_cgi.so"」ではなく「AddModule mod_cgi.c」しかありませんでした。(この設定ファイルをテストしていた環境で使ったらApacheの起動時にAddModuleの部分でエラーが発生しました)

【解決編】↓
AddModuleを使用しているということは、apache1.3系の可能性あり。
確か、AddModuleは2.0になるときに削除されたディレクティブなので。

Aサーバは2.0系で、後に書いた「その他の同じような環境」のサーバが1.3系の可能性が高い。多分、2.×系にAddModuleディレクティブを書いたら、「1.3系のディレクティブが見つかったよ」とエラーが出ているはず。
Bサーバについて、1.3系で「AddModule ~/mod_cgi.c」が書かれているということは、cgiのモジュールは読み込まれているはずなので、後は設定の問題。
exeをcgiとして動かしたいのであれば、exe拡張子をcgi起動できるようにしないといけないので、適当なディレクティブ(動作させたいディレクトリ)に以下を追加。
AddHandler cgi-script .exe
Options ExecCGI
※記載する場所は環境によって違うけど、そのままhttp.confにコンフィグを書いているのであれば、AddHandler、Options共に、追記、もしくは併記(既にhttp.confに存在している場合)してもらえればOK。
多分併記になる
AddHandler cgi-script .cgi と書いてあると思うので
AddHandler cgi-script .cgi .exe
とする。

次に
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
とあると思うので
<Directory />
Options FollowSymLinks ExecCGI
AllowOverride None
</Directory>
とする。

後は、実行してあげれば.exeの拡張子はcgiとして動く。

2011年2月4日金曜日

【java】ポートを使った他端末との通信

サーバーとローカルでのソケット間通信の処理を書く際に、いつもWriterとReaderの選択をミスって時間かかってしまうので、メモしとく。

【送る側】
(MylogSend)
----------------------------------------------------------------
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
import java.net.*;
public class MylogSend {
private static final String host = "000.000.000.000";
public static void main(String[] argv) throws Exception {
MylogSend.write("日本語もOK");
}
public static void write(String msg) {

        System.out.println(host + "に接続します。" );
        PrintWriter out = null;
        try {
            Socket socket = new Socket(host,514);
         // 出力ストリームを取得
            out = new PrintWriter(socket.getOutputStream(), true);
            out.println(msg);
            out.flush();

        } catch (UnknownHostException e) {
            // TODO 自動生成された catch ブロック
            e.printStackTrace();
        } catch (IOException e) {
            // TODO 自動生成された catch ブロック
            e.printStackTrace();
        }
        finally{
            if (out != null) {
                out.close();                
            }
        }
}
}
----------------------------------------------------------------

【受信側】
※コンソール落とすまでずっと受信し続ける
(Startup.class)
----------------------------------------------------------------
public class Startup {
    static receive_data rcdata;
    /**
     * @param args
     */
    public static void main(String[] args) {
        rcdata = new receive_data();
        
        if (args.length > 1) {
            rcdata.intPort = Integer.parseInt(args[0]);
        }
        rcdata.start();    
    }
}
----------------------------------------------------------------
(receive_data.class)
----------------------------------------------------------------
import java.io.*;
import java.net.*;
import java.sql.Time;
import java.util.Date;
public class receive_data extends Thread {
    Date time = new Date();
    public int intPort = 514;
    public String host =  "000.000.000.000";
    public receive_data() {
    }
    ServerSocket svsocket;
    public void receive() throws Throwable{
        InputStreamReader in = null;
        try {
            Socket socket = svsocket.accept();
            InputStream ois = socket.getInputStream();
            in = new InputStreamReader(ois, "SJIS");
            BufferedReader bf = new BufferedReader(in);
            time.setTime(System.currentTimeMillis());
            System.out.println(time.toString());
            String line;
            while ((line = bf.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            // TODO 自動生成された catch ブロック
            e.printStackTrace();
        }
        finally{
            in.close();
        }
    }
    @Override
    public void run() {
        try {
            svsocket = new ServerSocket(intPort);
            System.out.println("クライアントからの接続をポート"+ intPort + "で待ちます。");
            while (this != null) {
                time.setTime(System.currentTimeMillis());
                System.out.print(time.toString() + "~");
                receive();
            }
        } catch (IOException e) {
            // TODO 自動生成された catch ブロック
            e.printStackTrace();
        } catch (Throwable e) {
            // TODO 自動生成された catch ブロック
            e.printStackTrace();
        }
    }
}
----------------------------------------------------------------

2011年1月15日土曜日

静音PCサーバ PRIMERGY(プライマジー) TX100 S1のBIOS設定

静音PCサーバ PRIMERGY(プライマジー) TX100 S1を購入したので、Debianをインストールしてみた。

とりあえずCDを突っ込んだら認識してインストールが始まったので、ここでは特にBIOSをいじらず進む。
インストールが無事完了し、さあ再起動や!とわくわくしながら待っていると「OSが認識できませぬ」というエラーが・
ハードディスクドライブは一つしかないし、CDは抜いてるし、じゃあさっきのインストーラはどこにインストールしてたんだよ・・・
とりあえず、BIOSを見てみるけど特に変えなければならない設定はなさそう。

途方にくれながら、"サーバー名 BIOS”とか色々ググって見たところ、同じサーバーに関しての記事はなかったけど、「RAID組んでなくてもとりあえずRAID0の設定をしないとだめな場合がある」というような記述を発見。

というわけで、もう一度BIOSをいじりまくってみました。




  1. BIOSを起動(電源投入後にENTER押せって出たらENTER)して、Configure→newconfigurationを選択。
    ここでハードディスクドライブのREADYというところを選択しスペースキーを押下するとなんか表示が変わる。(これに気付くのに苦労した・・・)

  2. さらにF10を押下すると以下のような画面になるのでまたスペースキーを押下
  3. なんか文字が出てくるので、またF10を押下する。
  4. すると待望のRAID設定画面が・・・(涙)
  5. 初期値がRAID0なので何も変更せずにESCキーを押下して画面を閉じる。
  6. そののあと、Select Boot DriveでBootドライブを設定。
  7. ESCで終了しようとすると保存するかどうか聞かれるので保存して、再起動(Ctrl+Alt+Delete)
  8. そして、待望のログイン画面がキターーーーーー(・∀・)ーーーーーーーー
というわけで、苦闘しながらなんとかDebianが動く環境のセットアップが完了。
写真だけ残ってて、記憶をたどりながら書いたので一部うそかいてるかもしれないけど、大筋はこれで合っているはず。
最初のnewconfigurationのところでドライブのところに表示される"READY"ってのは設定できる準備ができてるよ(≧∀≦)ってことなのかな?
スペースキーを押下して、選択してからF10押下しないと、編集ができないし最初は使い方が全然分からんかったなあ。