Simple UDP broadcast client and server on differen

2019-02-12 23:08发布

The following client and server UDP broadcast code works on fine when both are on the same PC. However when I have them on separate PC's in the same WIFI LAN nothing happens at all. I have managed to get a multicast version working fine on the two separate PC's but not this :(. I have shut down firewalls on both and succesfully pinged each from both PC's.

The idea behind this test is so I can use this method so a client can find a server on the LAN by sending a datagram packet (peer discovery). I think I'm doing something wrong with the host name or something but after a week of googling and testing new ideas I'm officially all out of them :(.

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();
            }
        }
    }
}

Just wondering if anyone can help?

2条回答
乱世女痞
2楼-- · 2019-02-12 23:41

To actually broadcast you must send the packet to all the IP on the LAN. The range of possible IP is from 0.0.0.0 to 254.254.254.254 but to select all of them you could write: 255.255.255.255. But most of the routers will block this. They will allow something like 192.168.1.255 witch broadcasts to all the 255 ip from 192.168.1.0 to 192.168.1.254 which is what you need, I think.

查看更多
等我变得足够好
3楼-- · 2019-02-12 23:49

Is hostname localhost? If so, you can not reach other pc. You must change it with target IP address.

查看更多
登录 后发表回答