即時通訊只是開始在c + +編碼,我想構建一個多線程服務器,但我有一些錯誤。首先,這裏是我得到的代碼:c + +多線程服務器與std ::線程鑄造變量
while(true){
printf("waiting for a connection\n");
csock = (int*)malloc(sizeof(int));
if((*csock = accept(hsock, (sockaddr*)&sadr, &addr_size))!= -1)
{
printf("---------------------\nReceived connection from %s\n",inet_ntoa(sadr.sin_addr));
//std::thread th(&Network::SocketHandler, NULL);
std::thread th(Network::SocketHandler, (void*)csock);
th.detach();
}
else
{
fprintf(stderr, "Error accepting %d\n", errno);
}
}
}
void Network::SocketHandler(void* lp)
{
int *csock = (int*)lp;
char buffer[1024];
int buffer_len = 1024;
int bytecount;
memset(buffer, 0, buffer_len);
if((bytecount = recv(*csock, buffer, buffer_len, 0))== -1){
fprintf(stderr, "Error receiving data %d\n", errno);
}
printf("Received bytes %d\nReceived string \"%s\"\n", bytecount, buffer);
strcat(buffer, " SERVER ECHO");
if((bytecount = send(*csock, buffer, strlen(buffer), 0))== -1){
fprintf(stderr, "Error sending data %d\n", errno);
}
printf("Sent bytes %d\n", bytecount);
}
我在這行編譯時得到一個錯誤:
std::thread th(Network::SocketHandler, (void*)csock);
說: 的std ::螺紋::線程(_Callable & &,_args & & ...)[with _Callable = void(Network :: )(int); _args = {無效*}] 沒有已知的轉換用於從「參數1」到「空隙(網絡:: & &)(INT)」
如何解決這個問題?還是有更好的方式來創建一個多線程服務器的任何示例可能是其他職位?
你可能會考慮看看Boost.Asio的C++網絡庫 –