Avatar billede nielsbrinch Nybegynder
22. oktober 2003 - 17:05 Der er 6 kommentarer og
1 løsning

Send og modtage besked på lokalnetværket

Jeg har lavet en lille simpel klasse til at afsende og modtage beskeder på det lokale netværk. Det virker dog ikke. Den sender muligvis (ved ikke hvordan jeg kan være helt sikker) men den modtager i hvert fald ikke noget. Den er blokeret i lytte-funktionen - og kommer aldrig videre.

public class Communicate {
  private IPAddress groupAddress = IPAddress.Parse("255.255.255.255");
  private int groupPort = 1515;
  private bool done = false;
  private Form1 owner;
  private Thread listenerThread;

  public Communicate(Form1 owner) {
    init();
    this.owner = owner;
  }

  public Communicate(String ip, int port) {
    groupAddress = IPAddress.Parse(ip);
    groupPort = port;
    init();
  }

  public void init(){
    ThreadStart ts = new ThreadStart(listen);
    listenerThread = new Thread(ts);
    listenerThread.Start();
  }

  public void shutdown() {
    done = true;
    listenerThread.Abort();
  }

  private void listen() {       
    UdpClient listener = new UdpClient();
    IPEndPoint groupEP = new IPEndPoint(groupAddress,groupPort);

    try {
        listener.JoinMulticastGroup(groupAddress);
        listener.Connect(groupEP);
           
        while (!done) {
            Console.WriteLine("Waiting for broadcast");
            byte[] bytes = listener.Receive(ref groupEP);
            Console.WriteLine("Besked modtaget");
            Console.WriteLine("Received broadcast from {0} :\n {1}\n",
            groupEP.ToString(),
            Encoding.ASCII.GetString(bytes,0,bytes.Length));
            onMessageReceived(groupEP.ToString(),            
            Encoding.ASCII.GetString(bytes,0,bytes.Length));
        }
        listener.Close();
    } catch (Exception e) {
        Console.WriteLine(e.ToString()+": "+e.Message);
    }
  }

  public void broadcast(String[] message) {
    UdpClient sender = new UdpClient();
    IPEndPoint groupEP = new IPEndPoint(groupAddress,groupPort);
    try {
        for (int i = 0; i < message.Length; i++) {
        Console.WriteLine("Sending datagram : {0}", message[i]);
        byte[] bytes = Encoding.ASCII.GetBytes(message[i]);
        sender.Send(bytes, bytes.Length, groupEP);
    }
    sender.Close();
    } catch (Exception e) {
        Console.WriteLine(e.ToString());
    }
  }
}

Jeg har nogle gæt på hvad fejlen kan være:
- Det er ikke rigtigt at jeg burde modtage en besked som jeg sender til 255.255.255.255
- Porten skal være noget bestemt jeg ikke ved.
- Der er en eller anden åbenlys dummefejl som jeg har stirret mig blind på.

Har du foreslag til hvad der kan være galt?
Avatar billede finger Nybegynder
22. oktober 2003 - 17:28 #1
prøv at sniffe pakker på netværket når du mener du sender noget. Så kan du se om der kommernoget ud på nettet. Du kan sandsynligvis også se hvordan pakken ser ud mht adresse og port.

jeg anbefaler http://www.ethereal.com/ som pakkesniffer.

Det tror jeg afgjort kan hjælpe dig på vej.
Avatar billede nielsbrinch Nybegynder
22. oktober 2003 - 17:33 #2
Tak, det tror jeg bliver en rigtig god ting at have ved hånden.
Avatar billede nielsbrinch Nybegynder
22. oktober 2003 - 17:41 #3
Jeg har nu brugt pakkesnifferen som foreslået og fundet ud af at mine pakker rent faktisk sendes til 255.255.255.255 port 1515. Men jeg modtager ikke nogen pakker tilbage, jeg var under den opfattelse at beskeder sendt til 255.255.255.255 repræsenterer mit subnet og broadcastes til alle på netværket (derunder vel mig selv?)
Avatar billede finger Nybegynder
22. oktober 2003 - 18:11 #4
nåh! det er det du prøver. du kan ikke sende og modtage på samme tid. Kablet (og netkortet) er jo optaget med at sende og kan deror ikek lytte samtidigt. Så det kan ikke lade sig gøre. Hvis du skal teste programmet, må du have adgang til 2 computere. Een der sender og een der lytter.
Avatar billede nielsbrinch Nybegynder
22. oktober 2003 - 18:32 #5
ok, så kan det jo være det virker :D
Avatar billede nielsbrinch Nybegynder
22. oktober 2003 - 18:49 #6
Når jeg rent faktisk installerer programmet på computeren kan den faktisk godt modtage sine egne beskeder! Hvilket overbeviser mig om at det også virker på det lokale netværk. Konklusion, koden i spørgsmålet virker, omstændighederne skulle bare tilordnes.

Tak finger, tag dine points.
Avatar billede finger Nybegynder
22. oktober 2003 - 18:55 #7
ok
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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