2011-12-09 60 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]"); 

我希望所有這些將導致一種更好的方式。

相關問題