2016-04-05 108 views
0

我有一個服務器,它會爲每個新的客戶端消息到所有連接的客戶端(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); 
} 

流功能每隔n秒發送一條消息。一個單獨的線程(全流不做它在同一時間)。如何同時發送消息給所有客戶端?(廣播)

+0

你有'Server'類中的活動用戶列表嗎?如果是這樣,你可以遍歷這個列表(或映射或任何最適合你的需求)發送消息給每個。 – ArchbishopOfBanterbury

+0

但是,每個客戶端連接了不同的套接字,還是我錯了? –

回答

0

我不能看到Streamfunction。沒有相應的功能,我不能給出完美的答案。通常你會在for循環中發送(asynchron)給所有的客戶端。該系統將青少年發送按摩給每個客戶一個又一個。如果你想真正發送按摩到多個客戶端,同時你需要使用多播。 (=發送一個將到達多個客戶端的包)。不幸的是,這是不可能使用TCP的,因爲TCP在一個主機和一個客戶端之間建立(安全)點對點連接。你將不得不使用UDP。請記住,如果軟件包將以正確的順序到達,正確或完全到達,則UDP不會在意。

相關問題