Toon posts:

[alg/c++] Netwerk client notificatie

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met een programma te ontwikkelen waarvoor ik in principe geen "vaste" server heb dus wil ik alle clients (client/server-based maken) zodat ze zelf met elkaar onderling kunnen communiceren zonder een server in het minden... Echter zit ik met het probleem hoe laat ik de clients weten dat ze "online" zijn... Dus hoe stuur ik een informatie packet over het netwerk die andere op kunnen vangen en zo weten van ip 192.168.0.1 daar draait ook een client op en ip 192.168.0.2 gaat nu aan en huppa die draait ook een client.... ik neem aan dat het met broadcasting / broadcasting addresses gaat echter waar kan ik meer informatie hier over vinden (op internet zelf is weinig echte informatie te vinden waar ik wat aan heb) en als het er is zijn het voornamelijk voorgedefineerde objecten (controls zoals activex) maar ik wil dat zelf kunnen "maken" in C/C++

Het enige wat ik zo 1-2-3 kon vinden @ GoT was
[topic=115890/1/50]

Maar dat bracht me niet tot een eigen idee of oplossing

Verwijderd

Ja ehm... Je wilt eens verder kijken naar UDP. Als je een UDP netwerp pakket verstuurt met je socket opties op broadcast dan komt het in principe bij alle machines op hetzelfde netwerksegment (!) terecht. Als je wilt communiceren met een machine op een ander segment moet je een gericht pakket gaan sturen, of een broadcast host (erg ongebruikelijk) neerzetten op dat netwerk.

Hier onder als voorbeeldje een stukje code wat ik zelf gebruik om de WakeOnLAN functionaliteit van mijn linux machine te activeren. (Hoef ik niet naar boven te lopen als ik wil internetten :)) Misschien hebben er nog meer tweakerts wat aan ook!
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// WOLSend.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "winsock2.h"
#include <iostream.h>

#define DEFAULT_PORT 5001 
#define DEFAULT_PROTO SOCK_DGRAM // TCP 

int main(int argc, char* argv[])
{
    struct sockaddr_in local; 
    WSADATA wsaData; 
    
    
    if (WSAStartup(0x202,&wsaData) != SOCKET_ERROR)
    {
        SOCKET sock;
        sock = socket(AF_INET, SOCK_DGRAM, 0);

        char val = TRUE;

        if (setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &val, sizeof(val)) != 0)
            cout <<"Error: setsockopt!" <<endl;

        unsigned char buffer[200];
        int i = 0, j;
        
        for (j = 0; j < 6; j++) { buffer[i] = 0xFF; i++; }

//      // address  00-D0-B7-8F-5D-54       // intel management adapter #1
//      // address  00-50-FC-27-C9-FD       // rtl8139 with WOL capability
        for (j = 0; j < 16; j++)        // 8 is not enough...
        {
//          buffer[i] = 0x00; i++;
//          buffer[i] = 0xD0; i++;
//          buffer[i] = 0xB7; i++;
//          buffer[i] = 0x8F; i++;
//          buffer[i] = 0x5D; i++;
//          buffer[i] = 0x53; i++;

            buffer[i] = 0x00; i++;
            buffer[i] = 0x50; i++;
            buffer[i] = 0xFC; i++;
            buffer[i] = 0x27; i++;
            buffer[i] = 0xC9; i++;
            buffer[i] = 0xFD; i++;
        }

        local.sin_family = AF_INET;
        local.sin_addr.s_addr = htonl(INADDR_BROADCAST);
        local.sin_port = htons(4242); 

        for (j = 0; j < 6; j++)
        if (sendto(sock, (char *)buffer, 200, 0, (struct sockaddr *)&local, sizeof(local)) == 0)
            cout <<"Error: sendto!" <<endl;

        WSACleanup(); 
    }

    return 0;
}

Hoop dat je er wat aan hebt. Dit programma werkt door een UDP broadcast te doen met als payload in het pakket een geldig WakeOnLAN frame...

Verwijderd

Topicstarter
Ik ben nu in nieuwsgroepen aan het spitten, en toen kwam ik info tegen over multicasting en er wordt beweerd dat multicasting doeltreffender en minder load in neemt op de ontvangende machines? Kam iemand dit bevestigen of verklaren?

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op vrijdag 26 april 2002 00:47 schreef Caesium het volgende:
Ik ben nu in nieuwsgroepen aan het spitten, en toen kwam ik info tegen over multicasting en er wordt beweerd dat multicasting doeltreffender en minder load in neemt op de ontvangende machines? Kam iemand dit bevestigen of verklaren?
:?

Multicast is toch een TCP toepassing die verkeer van 1 naar 1-x machines toestaat zonder de noodzaak te broadcasten of een aparte connectie per recipient te bedienen of ben ik nu de war?

Zo ja heb je er niks aan want dan moet je nog steeds de IP's van werkende ontvangers weten.

Professionele website nodig?


Verwijderd

Topicstarter
Ik weet wel de IP-ranges...
die zijn
192.168.1.xxx
192.168.2.xxx
192.168.3.xxx
voor de clients