我正在寻找以下验证:
为了找出服务器是否启动,我应该这样做 建立到主机的TCP连接:给我的服务器的端口组合。 在这种情况下,“如果建立了连接,那么服务就会启动,否则 - 如果连接被拒绝,则服务已关闭“。
那么,当Socket
的getRemoteSocketAddress()
返回一个对象而不是null时,我是否应该满意服务器已启动?也就是说,以下代码是否始终将准确的信息打印到控制台?
Socket clientSocket = new Socket(hostName, port);
System.out.println("To console: The server is " + (clientSocket.getRemoteSocketAddress()==null?"down.":"up.") );
对我来说,确实如此。但是,我没有关于这些事情的实用信息,如果没有第二意见,也无法确定。
注意:我知道,服务器正在运行并不一定意味着它正在接受和处理请求。这是通过交换一些问候来看到/听到谁在谁和谁从那里根据其间的协议。但是,这些与此无关。
TIA
答案 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
响应,还可能在响应正文中看到更复杂的内容。