【问题标题】:When do serversocket.accept() throws an exception? [java]serversocket.accept() 什么时候抛出异常? [爪哇]
【发布时间】:2017-06-18 02:34:54
【问题描述】:

我想计算每秒有多少传入连接。这意味着,我做了一个这样的循环:

int incomingConnections;
while(true) {
  try {
     Socket socket = serverSocket.accept();
     incomingConnections++;
  } catch (Exception ex) {
  }

之前,我是这样启动 TimerTask 的:

new Timer().scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                System.out.println("TimerTask: " + incominConnections + " incoming Connections while the last second.");
                incominConnections = 0;
            }
        }, 0, 1000);

我需要做什么,因为我希望 int 仅在它接受连接成功时计数,而不是每次迭代循环时计数。 有什么帮助吗? 谢谢

【问题讨论】:

  • 我不明白你想用 TimerTask 做什么。据我所知,这与您的问题无关。它也不做任何事情。为什么包含它?
  • '每次迭代循环'和'当它成功接受连接时'在您发布的代码中是相同的。如果抛出异常,则计数器不会递增。不清楚你在问什么。

标签: java sockets exception timer timertask


【解决方案1】:

您的代码已经完成了您想要的操作。

ServerSocket.accept() 的 Java 文档指出:

侦听要与此套接字建立的连接并接受它。该方法会一直阻塞,直到建立连接。

因此,由于对接受的调用会阻塞,因此只有在成功建立连接时才会增加计数器。

如果在调用 accept() 时抛出异常,您将进入 catch 块,而不执行递增计数器的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多