1

我正在尝试将端口侦听器实现为一项服务,在获取带有 te 数据的字符串后,它将执行插入数据库。我希望它在服务器上永远运行。

所以在我使用 Java Service Wrapper 之前,我想问一下我是否包装了正确的代码,所以这是我的代码,我愿意听听其他人是如何解决这个问题的。

现在我遇到了一个问题,我第一次发送数据时它工作得很好,但从第二次开始它什么也没做,希望你能帮助我。

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()方法将在循环中将与新套接字的交互传递给该池中的线程。按照您上面的编码方式,它只接受一个连接,当该连接关闭时,您的main方法将退出。

附带说明一下,大多数人会使用现有协议而不是发明自己的协议。通过 HTTP 使用 REST 风格的服务是一种受欢迎的方法。

于 2013-02-26T19:33:18.427 回答
0

这将帮助你

    serverSocket = new ServerSocket(50000);
                while(true) {
                    socket = serverSocket.accept();
                    socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    new Thread(){
public void run(){
your_method_Name();
}}.start();
            }
于 2016-03-07T08:32:45.947 回答