2010-12-09 10 views

cevap

14

gönderme noktaya yayın datagramları Java datagram`ının her türlü göndermek için

, tek noktaya olsun, yayın veya çok noktaya, tek bir java.net.DatagramSocket ihtiyacı Soketin bağlanması gereken DatagramSocket kurucusunun portu. Bu sadece belirli bir limanda bize ulaşabilmemiz için başka taraflara ihtiyaç duyuyorsa gereklidir. Üçüncü bir kurucu, yerel bağlantı noktasını ve bağlanacağı yerel IP adresini alır. Bu, çok ağ bağlantılı ana bilgisayarlarda trafiğin hangi ağ bağdaştırıcısının alındığının önemli olduğu (nadiren) kullanılır.

DatagramSocket socket = new DatagramSocket(); 

byte[] b = new byte[DGRAM_LENGTH]; 
DatagramPacket dgram; 

dgram = new DatagramPacket(b, b.length, 
    InetAddress.getByName(MCAST_ADDR), DEST_PORT); 

System.err.println("Sending " + b.length + " bytes to " + 
    dgram.getAddress() + ':' + dgram.getPort()); 
while(true) { 
    System.err.print("."); 
    socket.send(dgram); 
    Thread.sleep(1000); 
} 

Alma noktaya yayın datagramları

Bir göndermek ve tek noktaya yayın datagramları almak için normal bir DatagramSocket kullanabilir ve çok noktaya yayın paketleri göndermek için. Multicast datagramları alabilmek için MulticastSocket'a ihtiyaç duyulur. Bunun nedeni basittir, UDP'nin altındaki tüm protokol katmanları tarafından çok noktaya yayın trafiğini kontrol etmek ve almak için ek çalışma yapılması gerekir. Daha fazla bilgi için

byte[] b = new byte[BUFFER_LENGTH]; 
DatagramPacket dgram = new DatagramPacket(b, b.length); 
MulticastSocket socket = 
    new MulticastSocket(DEST_PORT); // must bind receive side 
socket.joinGroup(InetAddress.getByName(MCAST_ADDR)); 

while(true) { 
    socket.receive(dgram); // blocks until a datagram is received 
    System.err.println("Received " + dgram.getLength() + 
    " bytes from " + dgram.getAddress()); 
    dgram.setLength(b.length); // must reset length field! 
} 

:

+0

Her müşterinin yayın grubunda gönderilip alınabilmesi mümkün mü? (Göndermek için DatagramSocket ve almak için MulticastSocket olarak tanımlanır) – Razavi

1

Çoklu Yayın Soket aracılığıyla DatagramSocket verileri ve aynı veri göndermeyi almamın bana java bir örnek gösterebilir veri Noktaya Yayın Soket veri göndermek alırlar. , bir MulticastSocket aracılığıyla multicast'leri alırsınız, ancak bu şekilde göndermeniz gerekmez: bunları bir DatagramSocket aracılığıyla gönderebilirsiniz.

Java Tutorial, Custom Networking trail'a bakın.

DatagramSocket socket = new DatagramSocket(); 

biri isteğe bağlı olarak bir yerel sağlayabilmektedir:

+0

Yukarıdaki yorumun ne kadar doğru olduğuna emin değilim. Çok noktaya yayın paketini normal bir DatagramSocket üzerinden gönderemedim. Sadece sunucu tarafında bir MulticastSocket kullanmaya başladığımda, bana sunucudaki paketleri kokladığımda giden trafiği göstermeye başladı. –