【问题标题】:Prevent server terminating in client (golang) server (Java) application防止服务器在客户端 (golang) 服务器 (Java) 应用程序中终止
【发布时间】:2015-03-29 10:10:32
【问题描述】:

我有一个简单的 Java 回显服务器:

 int portNumber = 4444;

    try (
        ServerSocket serverSocket =
            new ServerSocket(Integer.parseInt(args[0]));
        Socket clientSocket = serverSocket.accept();     
        PrintWriter out =
            new PrintWriter(clientSocket.getOutputStream(), true);                   
        BufferedReader in = new BufferedReader(
            new InputStreamReader(clientSocket.getInputStream()));
    ) {
        String inputLine;
        while ((inputLine = in.readLine()) != null) {
            out.println(inputLine);
            System.out.println(inputLine);
        }
    } catch (IOException e) {
        System.out.println("Exception caught when trying to listen on port "
            + portNumber + " or listening for a connection");
        System.out.println(e.getMessage());
    }

还有一个简单的 golang 客户端:

func main() {
    fmt.Println("start client")
    conn, err := net.Dial("tcp", "localhost:4444")
    if err != nil {
        log.Fatal("Connection error", err)
    }
    conn.Write([]byte("hello world"))
    conn.Close()
    fmt.Println("done")
}

当我启动服务器然后运行客户端时,服务器会按预期回显“hello world”,但随后服务器退出/终止。

问。如何防止这种 Java 终止并强制服务器继续等待更多客户端请求?

【问题讨论】:

    标签: java tcp go client-server tcpclient


    【解决方案1】:

    当客户端终止时,服务器端的readLine 将导致流结束。因此,如果您希望服务器持续侦听新连接,只需将上述服务器代码置于无限循环中即可。

    例如

    while (true) {
       // above code
    }
    

    对于一个足够的游戏应用程序。

    【讨论】:

    • 改为:while (true) { inputLine = in.readLine(); if(inputLine != null){ System.out.println(inputLine); } } 现在它打印一次,不会终止,但不会再打印了。
    • 不,above code 的意思是所有的above server code。它必须重新建立服务器套接字
    猜你喜欢
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    相关资源
    最近更新 更多