我的网络中有5个设备使用不同的IP地址。我希望连接到这些设备,并在我的网络中可用时通过TCP / IP套接字从中获取数据。 如何检查它们是否在java中可用?
public void setUpConnection() {
try {
Socket client = new Socket(hostIp, hostPort);
socketReader = client.getInputStream();
socketWriter = new PrintWriter(client.getOutputStream());
} catch (UnknownHostException e) {
System.out.println("Error setting up socket connection: unknown host at " + hostIp);
System.out.println("host: " + hostIp + "port: " + hostPort);
} catch (IOException e) {
System.out.println("Error setting up socket connection: " + e);
System.out.println("host: " + hostIp + "port:" + hostPort);
}
}
答案 0 :(得分:17)
InetAddress.getByName(host).isReachable(timeOut);
进一步参考here
答案 1 :(得分:1)
如果您只想检查主机是否已启动,可以使用isReachable
答案 2 :(得分:1)
对于纯Java,基本上有两种方法:
活动:作为您的示例,但是通过主机上的所有端口和所有绑定IP循环
被动:在预定义的端口上运行一个小型服务器,另一个在它们可用时自行注册。
isReachable可能会因文档中所述的很多原因而失败。
答案 3 :(得分:0)
TCP / IP是一种握手模式。与这5个设备中的任何一个建立连接。您的客户端和收件人客户端都应该活着。首先,如果可能,请使用套接字NIO 。你能编写客户端逻辑,以便每当客户端上线时,首先在数据库中输入其ip和端口,并尝试从数据库获取其他可用的ip和端口,并尝试与它们建立连接。每当任何客户端设备无法访问时,从数据库中删除该条目。示例:当第一台设备上线时,只有一个套接字将被创建,因为当第二台设备上线时,数据库中只有一个条目有两个条目,一个是该设备的IP和端口,第二个条目属于到了第一个出现的设备。
由于 Sunil Kumar Sahoo