简单UDP广播客户端和服务器在不同的机器(Simple UDP broadcast client a

2019-07-01 14:18发布

下面的客户端和服务器的UDP广播代码工作的罚款时,两者是同一台PC上。 然而,当我在同一个WIFI局域网什么让他们在不同的电脑发生在所有。 我已经得到了一个多播的版本上的两个独立的PC的优良工作,但不是这个:(。我已经关闭了在防火墙和成功地ping的每个来自PC的。

这个测试背后的想法是这样我就可以用这个方法,以便客户端可以通过发送数据报文包(对发现)发现局域网上的服务器。 我觉得我做错了什么与主机名或东西,但谷歌搜索和测试新想法的一个星期后,我正式全力以赴他们的:(。

public class Client
{
    private String hostname= "localhost";
    private int port=1234;
    private InetAddress host;
    private DatagramSocket socket;
    DatagramPacket packet;

    public void run()
    {
        try
        {
            host = InetAddress.getByName(hostname);
            socket = new DatagramSocket (null);
            packet=new DatagramPacket (new byte[100], 0,host, port);
            socket.send (packet);
            packet.setLength(100);
            socket.receive (packet);
            socket.close ();
            byte[] data = packet.getData ();
            String time=new String(data);  // convert byte array data into string
            System.out.println(time);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}



public class Server
{
    public static final int DEFAULT_PORT = 1234;
    private DatagramSocket socket;
    private DatagramPacket packet;

    public void run()
    {
        try
        {
            socket = new DatagramSocket(DEFAULT_PORT);
        }
        catch( Exception ex )
        {
            System.out.println("Problem creating socket on port: " + DEFAULT_PORT );
        }

        packet = new DatagramPacket (new byte[1], 1);

        while (true)
        {
            try
            {
                socket.receive (packet);
                System.out.println("Received from: " + packet.getAddress () + ":" +
                                   packet.getPort ());
                byte[] outBuffer = new java.util.Date ().toString ().getBytes ();
                packet.setData (outBuffer);
                packet.setLength (outBuffer.length);
                socket.send (packet);
            }
            catch (IOException ie)
            {
                ie.printStackTrace();
            }
        }
    }
}

只是想知道如果有人能帮助?

Answer 1:

为了实际广播必须将数据包发送到LAN上的所有IP。 可能的IP的范围是从0.0.0.0到254.254.254.254,而是选择所有这些,你可以写:255.255.255.255。 但大多数的路由器将阻止这一点。 他们将允许类似192.168.1.255女巫广播从192.168.1.0到192.168.1.254这是你所需要的所有255个IP,我想。



Answer 2:

是主机名本地主机? 如果是这样,你不能达到其它PC。 你必须与目标IP地址更改。



文章来源: Simple UDP broadcast client and server on different machines