2016-04-05 16 views
0

Ich habe einen Server, der für jeden neuen KundenNachricht an alle angeschlossenen Clients (Winsock) (C++)

while ((client_socket = accept(server_socket, (sockaddr*)&client_info, &client_addr_size))) 
{ 
    nclients++; 
    HOSTENT *hst; 
    hst = gethostbyaddr((char*)&client_info.sin_addr.S_un.S_addr, 4, AF_INET); 
    printf("+%s [%s] new connect!\n", (hst) ? hst->h_name : "", inet_ntoa(client_info.sin_addr)); 
    PRINTUSERS; 
    DWORD thID; 
    CreateThread(NULL, NULL, SexToClient, &client_socket, NULL, &thID); 
} 

Stromfunktion alle n Sekunden sendet eine Nachricht. (Alle Ströme einen separaten Thread erzeugt nicht tun es gleichzeitig) .Wie senden Sie eine Nachricht an alle Clients zur gleichen Zeit? (Broadcast)

+0

Haben Sie eine Liste aktiver Benutzer in der 'Server' Klasse? Wenn dies der Fall ist, können Sie einfach diese Liste (oder Karte oder was auch immer Ihren Anforderungen am besten entspricht) durchlaufen und die Nachricht an jeden senden. – ArchbishopOfBanterbury

+0

Aber mit jedem Client eine andere Steckdose angeschlossen, oder liege ich falsch? –

Antwort

0

Ich kann StreamFunction nicht sehen. Ohne die entsprechende Funktion kann ich keine perfekte Antwort geben. Normalerweise würden Sie (asynchron) in einer for-Schleife an alle Clients senden. Das System würde Teenager die Massage an jeden Kunden eins nach dem anderen senden. Wenn Sie gleichzeitig eine Massage an mehrere Clients senden möchten, müssen Sie Multicast verwenden. (= Senden eines Pakets, das bei mehreren Clients ankommt.) Leider ist dies mit TCP nicht möglich, da TCP eine (sichere) Punkt-zu-Punkt-Verbindung zwischen einem Host und einem Client herstellt. Sie müssten UDP verwenden. Denken Sie daran, dass UDP sich nicht darum kümmern wird, ob die Pakete in der richtigen Reihenfolge ankommen, korrekt sind oder überhaupt ankommen.

Verwandte Themen