我正在寻找以下方面的验证:
为了查明服务器是否已启动,我应该建立到主机的TCP连接:给我的服务器的端口组合。在这种情况下,"如果建立了连接,则服务启动,否则-如果连接被拒绝,服务将关闭".
那么,当Socket
的getRemoteSocketAddress()
返回一个对象而不是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
响应,而且可能希望在响应主体中看到更复杂的内容。