12

当两者都在同一台 PC 上时,以下客户端和服务器 UDP 广播代码可以正常工作。但是,当我将它们放在同一个 WIFI LAN 中的不同 PC 上时,什么也没有发生。我已经设法让多播版本在两台单独的 PC 上正常工作,但不是这样 :(。我已经关闭了两台 PC 上的防火墙并成功地从两台 PC 上 ping 通。

这个测试背后的想法是,我可以使用这种方法,这样客户端就可以通过发送数据报包(对等发现)在 LAN 上找到服务器。我认为我在主机名或其他方面做错了,但经过一周的谷歌搜索和测试新想法后,我正式摆脱了它们:(。

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

只是想知道是否有人可以提供帮助?

4

2 回答 2

11

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

于 2012-11-09T18:59:54.197 回答
3

主机名是本地主机吗?如果是这样,您将无法访问其他电脑。您必须将其更改为目标 IP 地址。

于 2012-10-21T16:08:15.577 回答