2011-12-09 63 views
0

我正在实现服务器侦听网络中任何活动客户端的示例。通过数据报套接字进行网络发现:多播

我正在使用Datagram套接字为服务器做组播和客户端来响应服务器。

public void run() { 

    try { 
     byte[] recvBuf = new byte[15000]; 
     DatagramPacket packet = new DatagramPacket(recvBuf, recvBuf.length); 
     DatagramSocket dSock = new DatagramSocket(4445); 
     dSock.receive(packet); 
     int byteCount = packet.getLength(); 
     ByteArrayInputStream byteStream = new ByteArrayInputStream(recvBuf); 
     ObjectInputStream is = new ObjectInputStream(new BufferedInputStream(byteStream)); 
     } 

}

,并在客户端:

public void run() { 
    { 
    ObjectOutputStream os = null; 
     try { 
      InetAddress address = InetAddress.getByName("Server's IP");//Note! 
      ByteArrayOutputStream byteStream = new ByteArrayOutputStream(15000); 
      os = new ObjectOutputStream(new BufferedOutputStream(byteStream)); 
      os.flush(); 
       os.flush(); 
      byte[] sendBuf = byteStream.toByteArray(); 
      DatagramPacket packet = new DatagramPacket(sendBuf, sendBuf.length, address, 4445); 
      int byteCount = packet.getLength(); 
      } 
    } 

}

在上面例如,客户端必须知道服务器的IP先验(硬编码)。我怎样才能修改服务器端的代码,以便服务器将它发送给客户端,并且客户端响应它?

我能够使用套接字来做到这一点,但它可能使用数据报套接字?

谢谢!

回答

1

你可以使用DatgramPacket.getAddress()和回复给发件人

返回这个数据报发往或接收到该数据包的机器的IP地址,该地址。

+0

@ peterlawrey-你问我从服务器端获取IP并将其作为数据报发送给客户端? –

+0

哦,我明白了!谢谢! –

+0

您的服务器和客户端没有数据报,只有发送者和接收者。接收者可以回复发送它的IP。 –

0

尝试获取hostAddress使用InetAddress.getHostAddress,读取IP部分并将其传递给变量。

InetAddress address = InetAddress.getByName("[variable]"); 

InetAddress address = InetAddress.getByAddress("[variable]"); 

我希望所有这些将导致一种更好的方式。

相关问题