私はあまり機能しない小さなサーバークライアントアプリケーションを持っています(クライアントはサーバーに接続し、パイプを介して番号を送信し、別の番号を受信します)。
ただし、一度に1つの接続でのみ機能します(クライアントが接続されている間、他のクライアントはサーバーにアクセスできません)
複数のクライアントが一度にサーバーに接続できるようにしたいのですが、これはワーカースレッドで行う予定です。
Obs:
#define CONNECT_NAMEDPIPE "\\\\.\\pipe\\ClientToServer"
サーバ:
HANDLE namedPipe = CreateNamedPipe (CONNECT_NAMEDPIPE,
PIPE_ACCESS_DUPLEX,
PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT,
2,
sizeof(MinMax),
sizeof(NumberList),
0, // timeout
NULL);
if (namedPipe == INVALID_HANDLE_VALUE) {
printf("Unable to create named pipe\r\nServer closing\r\n");
printf("CreateNamedPipe failed, GLE=%d.\r\n", GetLastError());
} // Error unable create pipe
else {
printf("Server created\r\n");
printf("Awaiting connection\r\n");
ConnectNamedPipe(namedPipe, NULL);
etc ...
}
したがって、サーバーはクライアントが接続するまでConnectNamedPipeを待機し、その後、他の接続には使用できなくなります。
複数の接続を有効にしたい場合、ワーカースレッドをどのように作成すればよいですか?
すべての接続が新しいパイプを作成する必要があります(新しいパイプ名/パスを使用して-CONNECT_NAMEDPIPEをすべてに使用することはできません)
他の誰かが接続しようとしていることをどのように知ることができますか?私のスレッドはどこにあるべきですか?私は立ち往生しています。