简单的UDP广播客户端和不同机器上的服务器

问题描述:

以下客户端和服务器UDP广播代码在两台计算机都在同一台PC上时工作良好。但是,当我将它们放在同一个WIFI LAN上的独立PC上时,根本没有任何事情发生。我已经成功地在两*立的PC上运行了多播版本,但没有这个:(我已经关闭了两台防火墙并且成功地从两台PC上ping了每台防火墙。这种方法让客户端可以通过发送数据报包(对等发现)在局域网上找到一台服务器,我认为我在主机名或某事上做错了什么,但经过一周的搜索和测试新想法后,所有出他们的:(。简单的UDP广播客户端和不同机器上的服务器

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

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

是主机名本地主机?如果是这样,你CA没有达到其他电脑。您必须使用目标IP地址进行更改。

+1

主机名是本地主机,我猜想可能是问题所在。我想一个简单的解决方案是找到服务器的IP地址,并将localhost更改为该IP地址。但是这样做不会破坏UDP广播的目的吗?我正在研究服务器监听网络上的任何广播的想法。客户端在网络上发送广播,服务器收到并回复。我正在使用它,因此客户端可以发现服务器,但通过手动为客户端提供服务器的IP地址,整个发现事情都是多余的。 – Paul

+0

我想,首先你必须广播到你的网络。有关于这个的文件。 [链接](http://docs.oracle.com/javase/tutorial/networking/datagrams/broadcasting.html) – chrome

+1

是的,这是我遇到的问题。我可以多播而没有问题。有很多UDP广播客户端/服务器的例子,但是当客户端和服务器在同一台机器上时,每个人都显示localhost。没有例子,当客户端和服务器不在同一台机器:(除非客户端发送它的数据包到192.168.0.0。Tricky ... – Paul

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

+0

192.168.0.0到192.168.0.254怎么办? –