在java中连接到本地网络上的另一个应用程序实例

时间:2015-07-10 19:18:58

标签: java sockets networking

我正在尝试实现server / clint java应用程序。一旦服务器套接字在端口3232上侦听,我希望客户端自动浏览网络并扫描子网中的每个IP地址,直到找到在端口3232上运行的另一个实例(服务器),然后报告它的IP地址,以便我可以在应用程序中使用它来设置套接字连接目标IP地址。

我被建议使用exec(nmap)扫描网络以查找开放端口,但我想在没有安装nmap的系统上部署此应用程序。

如果我理解正确,我必须进行for循环迭代主机,最后找到端口3232打开的正确主机。

public static ArrayList<InetAddress> checkHosts(int socket, int timeout)
{
ArrayList<InetAddress> al = new ArrayList<InetAddress>();
try
{
    byte[] buffer = {1};
    DatagramSocket ds = new DatagramSocket(socket);
    ds.setSoTimeout(timeout);
    DatagramPacket dp;
    InetAddress local = InetAddress.getLocalHost();
    String subnet = getSubnet(local);
    System.out.println(subnet);
    for(int i = 1; i <= 255; i++)
    {
        String host = subnet + i;
        try {
            ds.send(new DatagramPacket(buffer, 1, InetAddress.getByName(host), 3232));
            ds.receive(dp = new DatagramPacket(buffer, 1));
            if(dp.getPort() == socket && !dp.getAddress().equals(local))
                al.add(dp.getAddress());
        } catch(Exception e) {
            continue;
        }
    }
} catch (Exception e) {
    e.printStackTrace();
} 

return al;

}

0 个答案:

没有答案