Avatar billede riversen Nybegynder
15. juni 2003 - 12:47 Der er 11 kommentarer og
1 løsning

Mutlicasting til eksterne klienter

Ved ikke helt om det kan lade sig gøre, men hvis jeg kører følgende program:

import java.net.*;

public class IdSender extends Thread
{
  private DatagramSocket socket;
 
  public void run()
  {
    try
    {
      String name = "René Iversen";
      socket = new DatagramSocket();
     
      while ( true )
      {
        socket.send( new DatagramPacket( name.getBytes(), name.length(),
        InetAddress.getByName( "234.5.6.7" ), 17002 ) );

        try
        {
          Thread.sleep( 500 );
        }
        catch( Exception e){}
      }           
    }
    catch( Exception e ){}
  }
}

er det så muligt for klienter udenfor mit netværk at modtage beskeden? Hvordan?
Avatar billede arne_v Ekspert
15. juni 2003 - 12:56 #1
Det er vel ikke en multi-cast ? Du sender til en specifik modtager !

Men du burde sagtens kunne nå ud til modtagere udenfor dit
net med UDP.
Avatar billede riversen Nybegynder
15. juni 2003 - 12:58 #2
arne_v: det er meningen en ude fra skulle kunne tilmelde sig...og så er det vel multicast.

Men hvordan gør man det i java? Således jeg ikke skal bekymre mig om det er 1 eller 10 klienter....eksterne
Avatar billede arne_v Ekspert
15. juni 2003 - 13:00 #3
Jeg har faktisk aldrig selv brugt det.

Men der er en MulticastSocket klasse !
Avatar billede arne_v Ekspert
15. juni 2003 - 13:02 #4
Avatar billede riversen Nybegynder
15. juni 2003 - 13:03 #5
ja, det er jeg godt klar over som du kan se...men jeg ved ikke hvordan man får tilmeldt en ekstern klient.

Jeg har klient der ser sådan ud:
import java.net.*;

public class IdReceiver extends Thread
{
  private MulticastSocket socket;
 
  public void run()
  {
    try
    {
      socket = new MulticastSocket( 17002 );
      socket.joinGroup( InetAddress.getByName( "234.5.6.7" ) );

      DatagramPacket packet = new DatagramPacket( new byte[1024], 1024 );
      while ( true )
      {
        socket.receive( packet );
       
        System.out.println( new String( packet.getData(),
                                        0, packet.getLength() ) +
                                        " modtaget fra [" +
                                        packet.getAddress().getHostAddress() +
                                        ":" +
                                        packet.getPort() + "]" );

          Thread.sleep( 1000 );
      }           
    }
    catch( Exception e ){}
  }
}

men det virker vel ikke hvis du fx. kø'rer den på din pc og jeg kører senderen på min
Avatar billede arne_v Ekspert
15. juni 2003 - 13:08 #6
Som sagt er jeg ikke multicast ekspert.

Men som jeg har forstået det så aner senderen ikke hvem og hvormange
han sender til d.v.s. at han sender bare til en multicast adresse
og dem der lytter på den modtager.

Hvis du vil sende til nogen du kender så skal det nok være multiple
ikke-multicast datagrams.
Avatar billede arne_v Ekspert
15. juni 2003 - 13:09 #7
Hvis du kunne sende til min PC ville jeg klage til dem der
har lavet min router !

:-)

Mere seriøst: du spørger pakker til multicast adresser bliver
routet ?

Det tror jeg ikke.
Avatar billede riversen Nybegynder
15. juni 2003 - 13:12 #8
arne_v: ok...de bliver ikke routet...det er jo også logisk nok. Men hvad gør man så, hvis man vil undgå at sende til alle klienter enkeltvis...er det muligt.
Avatar billede arne_v Ekspert
15. juni 2003 - 13:14 #9
Lidt søgning på Google afslørede masser af 5 bogstavs forkortelser
i.f.m. multicast routing.

Så det er muligt.

Men nok næppe over public internet.
Avatar billede arne_v Ekspert
15. juni 2003 - 13:17 #10
Jeg tror du er nødt til at lave en pakke per modtager.

Jeg kan ike forestille mig en router der kan
sige - jeg har den her pakke til 2 modtagere - de to modtagere
sidder på forskelligt net, så jeg laver den om til 2 pakker og sender
en til hver modtager.
Avatar billede riversen Nybegynder
15. juni 2003 - 13:20 #11
ok. takker. Du kan svare
Avatar billede arne_v Ekspert
15. juni 2003 - 13:23 #12
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester