什么构成条件"a server is up"



我正在寻找以下方面的验证:

为了查明服务器是否已启动,我应该建立到主机的TCP连接:给我的服务器的端口组合。在这种情况下,"如果建立了连接,则服务启动,否则-如果连接被拒绝,服务将关闭".

那么,当SocketgetRemoteSocketAddress()返回一个对象而不是null时,我是否应该满足于服务器已启动?也就是说,以下代码是否总是将准确的信息打印到控制台?

    Socket clientSocket = new Socket(hostName, port);
    System.out.println("To console: The server is " + (clientSocket.getRemoteSocketAddress()==null?"down.":"up.")  );

对我来说,的确如此。然而,我没有关于这些事情的实际信息,如果没有第二种意见,我不会确定。

注意:我知道,服务器启动并不一定意味着它正在接受和处理请求。这需要交换一些问候,看看/听到彼此关于谁是谁,然后根据其间的协议离开。然而,这些与此无关。

TIA

您甚至不需要调用

clientSocket.getRemoteSocketAddress();

因为构造函数调用来自:

Socket clientSocket = new Socket(hostName, port);

将尝试连接到套接字,如果失败,将抛出IOException。所以我宁愿这样做:

public boolean hostUp(String hostName, int port) {
    try {
        Socket clientSocket = new Socket(hostName, port);
        return true;
    } catch(IOException e) {
        return false;
    }
}

这就行了。

建立TCP连接是级别3(OSI)的健康检查。它告诉您服务已经启动并正在运行,并且正在端口上侦听。但是,它不会告诉您有关上层的任何信息。例如,如果使用服务器为http对象提供服务,则可以在已建立的tcp连接之上使用http GET /sample.file。或者,您可以将此服务器用于REST API,然后您不仅希望看到来自http层的200 OK响应,而且可能希望在响应主体中看到更复杂的内容。

相关内容

最新更新