什么构成条件"服务器启动"

时间:2014-10-11 12:57:42

标签: java sockets tcp

我正在寻找以下验证:

为了找出服务器是否启动,我应该这样做 建立到主机的TCP连接:给我的服务器的端口组合。 在这种情况下,“如果建立了连接,那么服务就会启动,否则 - 如果连接被拒绝,则服务已关闭“。

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

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

对我来说,确实如此。但是,我没有关于这些事情的实用信息,如果没有第二意见,也无法确定。

注意:我知道,服务器正在运行并不一定意味着它正在接受和处理请求。这是通过交换一些问候来看到/听到谁在谁和谁​​从那里根据其间的协议。但是,这些与此无关。

TIA

2 个答案:

答案 0 :(得分:1)

你甚至不需要打电话

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;
    }
}

这应该可以解决问题。

答案 1 :(得分:0)

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