简单UDP广播客户端和服务器在不同的机器上 [英] Simple UDP broadcast client and server on different machines

查看:450
本文介绍了简单UDP广播客户端和服务器在不同的机器上的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当两个客户端和服务器UDP广播代码位于同一台PC上时,它们的工作正常。然而,当我将它们放在同一个WIFI LAN的不同PC上时,根本没有任何事情发生。我已经设法让两个单独的PC上的多播版本运行良好,但不是这样:(。我已经关闭了两个防火墙,并成功地从两个PC上ping每个。

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.

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

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想知道是否有人可以提供帮助?

Just wondering if anyone can help?

推荐答案

要实际广播,您必须将数据包发送到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,这是你需要的,我认为。

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.

这篇关于简单UDP广播客户端和服务器在不同的机器上的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆