2012-01-15 80 views
0

我有一個簡單的服務器客戶端winsock程序運行。並想知道並添加2件事情。如何用winsock標記客戶端

如何標記/ ID客戶端?

並且能夠在病房後發送所有客戶端數據?

這是我現在的連接循環。 「client_id [a]」是我試圖標記/識別客戶端的東西,但可能不正確。

for(;;) 
{ 
if(Connect = accept(Listen, (SOCKADDR*)&Server, &size)) 
    { 
    std::cout<<"\nConnection was reached";  
    a = a +1; 
    client_id[a] = accept(Listen, (SOCKADDR*)&Server, &size) ??? 
    } 
} 

使用C/C++和windows。

希望有人能幫助我解決這個問題。

謝謝。

+0

你所說的「標記」是什麼意思?你只是想要一個客戶名單? – cnicutar 2012-01-15 18:26:43

+0

「標記」在識別/收集/記錄它們,以便我可以稍後發送數據給他們。是的,只要我可以用它來發送數據,我就會猜出一個簡單的客戶列表。無論什麼最適合這個。 – user1058431 2012-01-15 18:28:07

回答

0

連接到您服務器的每個客戶端都有自己的標識符SOCKET。請勿使用您的自定義標識符。也可以使用動態數組 - > std :: vector或map來保持你的客戶端。

此外,你有雙接受你會失去每一秒連接。

std::vector<SOCKET> clients; 
... 
for(;;) 
{ 
if(Connect = accept(Listen, (SOCKADDR*)&Server, &size)) 
    { 
    std::cout<<"\nConnection was reached";  
    clients.push_back(Connect) 
    } 
} 

在地圖的情況下,你有類似

std::map< SOCKET, YouClientClass > clients; 
... 
for(;;) 
{ 
if(Connect = accept(Listen, (SOCKADDR*)&Server, &size)) 
    { 
    std::cout<<"\nConnection was reached";  
    clients.insert(std::make_pair(Connect, YourClientClass(Connect))); 
    } 
} 
+0

你可以添加一個簡單的例子讓它工作,所以我可以測試它嗎? – user1058431 2012-01-15 18:31:16

+0

好吧,究竟包含我的客戶是什麼?所以,例如,以後我可以做一個簡單的for循環並將數據發送給所有客戶端? – user1058431 2012-01-15 18:34:50

+0

您的客戶端將包含一個unsigned int的套接字列表,這是連接客戶端的系統標識。 – AlexTheo 2012-01-15 18:41:58

相關問題