2011-01-12 3 views
1

私は、埋め込まれたJettyを提供するアプリケーション(Java)を持っています。デフォルトでは、私はJetty Server用のPort 8080を取得しようとします。ポートが使用中の場合、私はランダムなものを試してみてください。サービスとポートとしてのServerSocket、Tomcat

try { 
    socket = new ServerSocket(def); 
} catch (IOException e) { 
    socket = new ServerSocket(0); 
} 

問題は、私はTomcatが閉じている場合は、すべてが正常である8080でTomcatを実行し、顧客を持っているということです。もしTomcatがサービスとして動作していて、私のアプリケーションがポートを取得したいのであれば、tomcatはそこをリッスンしていますが、デフォルトのポート(8080)を取得します。ブラウズされたlocalhost:8080/test.htmlの場合、私はTomcatからHTTP 404を取得します。

だから、何とかtomcatが8080ポートに本当の要求がない限り、寝ているようです。

なぜ、どのように動作しているのか、その問題を捉えるためにJavaコードを変更する方法を知りたいのですが、

種類

答えて

1

別のポートを使用するようにTomcatまたはJettyを変更します。ポートごとに1つのリスナー。

+0

私が使用する唯一の重大な解決策は+1です。 – Daniel

+0

私は自分の投稿のコードで何をしようとしているのですか?ポート8080を使用する場合は、ランダムなポート番号を使用します。以前にtestappを使ってテストしました。ServerSocket ss = new ServerSocket(8080);その行の後にブレークポイントを持つポートを要求します。私のアプリケーションを起動すると、ポート8080を取ることができず、ランダムなものが開きます。サービスとして実行されているTomcatではできません。これがもう少し役立つことを願っています – Max

1

あなたはすでに問題を扱う...

しかし、(あなたが前に「tasklist.exe」とPIDを発見した場合)、あなたはより良い「taskkill.exe」コマンドを使用して、それを扱うことができます。

0

あなたの問題は、2つのアプリケーションがあなたのケースではTCPポート8080であるシステムリソースのために競合しているということです。ポートを解放するには、システムAPI(widnowsまたはlinuxまたは...)で作業する必要があります。あなたはJavaの独立性を後に残しています。私はこの作業(ぶら下がったWebサーバーではない)を見ている唯一の方法は、現在ポートに保持されているプロセスを見つけて数秒間中断するようにシステムに指示することです。他のプロセスよりも要求があると自動的にポートを要求します。 なしそれほど難解なソリューションです。

関連する問題