正确地断开客户端(telnet)与ServerSocket的连接

时间:2016-05-08 05:37:51

标签: java sockets serversocket

我想要一个简单的服务器套接字来接受客户端并读取一些文本并断开客户端与自身的连接。作为客户,我现在使用telnet,因为将来我会创建一个自定义程序。

    ServerSocket ss = new ServerSocket(SERVER_SOCKET_PORT); 
    Socket s = ss.accept();

    BufferedReader reader = new BufferedReader(new InputStreamReader(s.getInputStream()));
    String line;
    while (true) {
        line = reader.readLine();
        if (line == null || line == "" || line == "q") {
            log("-- breaking the loop");
            break;
        }

        printf("**%s%n", line);
    }
    reader.close();
    s.close();
    ss.close();

我遇到的问题是while循环永不中断。

2 个答案:

答案 0 :(得分:1)

首先,你不能比较String(s)的平等性。其次,我希望String.isEmpty()""来测试相等性。最后,您可以使用try-with-resourcesclose所有内容。像,

try (ServerSocket ss = new ServerSocket(SERVER_SOCKET_PORT);
        Socket s = ss.accept();
        BufferedReader reader = new BufferedReader(
                new InputStreamReader(s.getInputStream()))) {
    String line;
    while ((line = reader.readLine()) != null) {
        if (line.isEmpty() || line.equalsIgnoreCase("q")) {
            System.out.println("-- breaking the loop");
            break;
        }

        System.out.printf("**%s%n", line);
    }
} catch (Exception e) {
    e.printStackTrace();
}

答案 1 :(得分:1)

while (true) {
    line = reader.readLine();
    if (line == null || line == "" || line == "q") {
  

我遇到的问题是while循环永远不会中断。

所以同伴永远不会

  • 关闭连接
  • 通过(错误应用的)""运算符
  • 发送一个与==进行比较的空行
  • 发送仅包含"q"加上行终止符的字符串。

编写此循环的常规方法是:

while ((line = reader.readLine()) != null)
{
    if (line.isEmpty() || line == "q") {
        log("-- breaking the loop");
        break;
    }

    printf("**%s%n", line);
}

但是如果对等体永远不会关闭连接或发送"q",那么这个循环就不会退出。您是否发送任何会产生这些条件的内容?

  

断开客户端与自身的连接

这没有意义。请重申。