1

ポートリスナーをサービスとして実装しようとしています。このサービスは、データを含む文字列を取得した後、DB への挿入を実行します。これをサーバー上で永久に実行したい。

したがって、Java Service Wrapper を使用する前に、正しいコードをラップしているかどうかを尋ねたいと思います。ここに私のコードを示します。他の人がこの同じ問題にどのように取り組んでいるかを聞いてみましょう。

現在、最初にデータを送信したときは完全に機能するが、2 回目以降は何もしないという問題が発生しています。助けてください。

public class PortToDB {
    public static void main(String[] args) throws IOException {

        ServerSocket serverSocket = null;
        DBHandler handler = new DBHandler();
        try{
            serverSocket = new ServerSocket(50000);

        } catch (IOException e){
            System.err.println("Could not listen on port: 50000. Error: " + e);
            System.exit(1);
        }

        Socket clientSocket = null;
        try{
            clientSocket = serverSocket.accept();            
        } catch(IOException e){
            System.err.println("Accept failed. " + e);
            System.exit(1);            
        }

        //PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        String inputLine;

        while(true){
            while ((inputLine = in.readLine()) != null) {
                //out.println(inputLine);
                handler.dbInsert(inputLine);
            }   
        }
    }
}
4

2 に答える 2

0

通常、これはスレッドプールを使用して実行され、.accept()メソッドは、新しいソケットとの相互作用をそのプールからスレッドにループ処理します。上でコーディングした方法では、1つの接続のみを受け入れ、その接続が閉じられると、mainメソッドは終了します。

ちなみに、ほとんどの人は、独自のプロトコルを発明する代わりに、既存のプロトコルを使用します。HTTP経由でRESTスタイルのサービスを使用することは、はるかに受け入れられているアプローチです。

于 2013-02-26T19:33:18.427 に答える