Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Netzwerk-Broadcast

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
04.10.2005, 14:33 Uhr
oli2006



Wie ist es auf dem einfachsten Weg möglich einen Broadcast über's Netzwerk zu versenden?
Ich benötige sowas folgendes Problem. Ich habe eine SDI-Applikation unter VC++6 geschrieben, in der mehrere Clients auf eine MySQL-Datenbank zugreifen. Wenn jetzt ein Client den Datenbestand verändert sollen die anderen natürlich von der Veränderung informiert werden. Einen Timer der z.B. jede Minute auf jedem Client die Daten neu abruft halte ich nicht für sinnvoll. Ich habe mir nun also gedacht bei Veränderung des Datenbestandes sendet der Client, der die Daten verändert hat eine Mitteilung an alle Rechner im Netz, die diese veranlasst, die Daten neu abzurufen? Wär das machbar? Ich kenne mich leider mit Socket-Programmierung noch nicht aus...
Ich hoffe, jemand kann helfen. Danke schonmal
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.10.2005, 15:11 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hmm ich verstehe nicht ganz, wenn du von einem client die db änderst ist die doch für die anderen geändert? oder versteh ich da was falsch? Ansonsten ist evtl deine Datenbankstruktur schlecht gewählt? Ansonsten über CAsyncSocket, Typ SOCK_DGRAM, dann mit SentTo an das subnet senden. (über die broadcastadresse)


Zitat:

To send a broadcast (on a SOCK_DGRAM only), the address in the lpSockAddr parameter should be constructed using the special IP address INADDR_BROADCAST (defined in the Windows Sockets header file WINSOCK.H) together with the intended port number. Or, if the lpszHostAddress parameter is NULL, the socket is configured for broadcast. It is generally inadvisable for a broadcast datagram to exceed the size at which fragmentation can occur, which implies that the data portion of the datagram (excluding headers) should not exceed 512 bytes.


--
class God : public ChuckNorris { };

Dieser Post wurde am 04.10.2005 um 15:11 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
04.10.2005, 15:32 Uhr
oli2006



die db ist für alle geändert, ja. das problem ist aber dass die daten permanent auf in einem CListCtrl auf jedem client dargestellt werden. wenn jetzt ein client die daten ändert sollen die anderen benachrichtigt werden die dargestellten infos zu aktualisieren. da kam mir die idee die anderen clients vielleicht per broadcast darüber zu informieren, dass ein client die db verändert hat.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
04.10.2005, 16:04 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


jo da wird der broadcast das sinnvollste sein
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
04.10.2005, 16:13 Uhr
oli2006




Zitat von FloSoft:
jo da wird der broadcast das sinnvollste sein


Könntest Du mir da ein Code-Beispiel geben wie man sowas generell aufbaut? Hab wie gesagt leider keine Erfahrung mit Socket-Programmierung. Danke.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
04.10.2005, 16:28 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



C++:
CAsyncSocket send;
send.SendTo("RELOAD", 6, 3222 /* port */, NULL /* Broadcast */, 0);



und auf anderer Seite


C++:
CAsyncSocket recv;
char buffer[512];
recv.ReceiveFrom(buffer, 512, usw);



Mit Datagrammen hab ich noch nicht viel gearbeitet (jedenfalls nicht mit MFC). Weiß nicht ob man da zuerst noch "Create" aufrufen muss oder ob er das fürn broadcast automatisch erledigt, am besten mal ausprobieren. Evtl gibts auch schon was fertiges bei codeguru/codeproject
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
05.10.2005, 00:20 Uhr
oli2006



Habs folgendermaßen probiert:

C++:
void CNetzwerkView::OnButton1()
{
    CString host="255.255.255.255";

    CMySocket send;
     send.SendTo("RELOAD", 6, 3333, host, 0);
}




C++:
void CMySocket::OnReceive(int nErrorCode)
{
    CAsyncSocket::OnReceive(nErrorCode);

    CString host="255.255.255.255";
    UINT p=3333;
    int i;
    CMySocket recv;
    char buffer[512];
    i=recv.ReceiveFrom(buffer, 512, host, p);
}



Das Programm gelangt jedoch nicht in OnReceive.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
05.10.2005, 09:02 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


OnReceive kriegt man nur bei TCP-Verbindungen, (glaub ich zumindest) Ansonsten probier vorerst mal die direkte IP als Test. Ansonsten ist 255.255.255.255 eine etwas "große" broadcastadresse. Probier einfahc mal NULL dann nimmt er normalerweise die richtige

Ansonsten lass dir die Fehlermeldung mit WSAGetLastError und FormatMessage ausgeben (nach SendTo) ob er überhaupt broadcastet oder ob nicht noch was fehlt (Create/Bind, was auch immer)


Bearbeitung:

Create fehlt natürlich


C++:
send.Create(Port, SOCK_DGRAM);
send.SendTo(...)





--
class God : public ChuckNorris { };

Dieser Post wurde am 05.10.2005 um 09:03 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
05.10.2005, 22:58 Uhr
ao

(Operator)


Ist eigentlich nicht Sache eines Clients, in der Welt herumzubrüllen. Wenn das jeder täte. Kann nicht der Server den Clients Bescheid sagen, wenn es was Neues darzustellen gibt?

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
05.10.2005, 22:59 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja der Server ist ja ein MySQL-Server, der brüllt nicht
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: