1対複数の時、接続している全クライアントにメッセージを送信するにはどのようにしたらよいでしょうか?
/*******************
** 送受信スレッド **
*******************/
unsigned __stdcall send_recvThread(void *)
{
while(1)
{
// メッセージを受信
nResult = recv(new_socket, message, sizeof(message), 0);
if(nResult == SOCKET_ERROR)
{
error_code = WSAGetLastError();
// 強制終了の場合
if(error_code == WSAECONNRESET)
{
printf("予期しない切断が起こりました。IP:%s, port;%d\n" , inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));
break;
}else{
printf("受信に失敗しました。エラーコード%d\n" , WSAGetLastError());
break;
}
}
if(nResult == 0)
{
printf("ホストは切断しました。IP:%s, port;%d\n" , inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));
break;
}else{
message[nResult] = '\0'; // 受信バッファの後ろにNULLを付加
// 終了の合図
if(strcmp(message , "exit\n") == 0)
{
puts("クライアントが接続を切りました。\n");
break;
}
}
// 受信したメッセージを表示
puts("メッセージを受信しました。\n");
printf("%s:%d - %s\n" , inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port), message);
// 受信したメッセージをクライアントに送信
if(send(new_socket, message, strlen(message), 0) != strlen(message))
{
printf("送信に失敗しました。エラーコード%d\n" , WSAGetLastError());
break;
}
puts("メッセージを送信しました。\n");
}
shutdown(new_socket, 2);
closesocket(new_socket);
_endthreadex(0);
return 0;
}