下面是接受客戶端的代碼...我只是添加了一點將它添加到池中,這是一個list<Client>
。 Client
是我自己的類,它是由(SOCKET, Char*)
套接字和ip地址定義的。 addclient2pool()
函數只是添加到列表中。然後我遍歷列表並通過存儲的套接字Client
發送數據。C++自定義客戶端處理程序
while(true) {
ClientSocket = accept(ListenSocket, (struct sockaddr *) &n, &len);
if (ClientSocket == INVALID_SOCKET) {
printf("accept failed with error: %d\n", WSAGetLastError());
closesocket(ListenSocket);
WSACleanup();
return;
}
addClient2Pool(Client(ListenSocket, inet_ntoa(n.sin_addr)));
}
套接字似乎已經關閉,所以我不能發送消息... 10057
。我很確定,我將套接字存儲到Client
類的方式存在根本性錯誤,但我對C++不熟悉。
void messageHandler() {
int iSend;
char* charB = "hello!";
while(true) {
for(ClientPool::iterator it = mainClientPool.begin(); it != mainClientPool.end(); ++it) {
Client c = *it;
SOCKET sock = c.getSocket();
iSend = send(sock, charB, sizeof(charB),0);
if (iSend == SOCKET_ERROR) {
printf("send failed with error: %d\n", WSAGetLastError());
}
}
Sleep(2000);
}
}
我用std::thread nameofthread(void)
和nameofthread.join();