複数のクライアントが接続するクライアントサーバーチャットプログラムのクライアント側の実装に問題があります。問題は、私が遭遇しているのは、(別のクライアントへのチャットメッセージ)と受信(別のクライアントからのチャットメッセージ)を同時にどの程度正確に行う必要があるかということです。何が起こっているのかというと、私は常にデータを送信していて、決して読み取っていないということです。フォークして、一方を読み取り、もう一方を送信する必要がありますか?
これが関連するコードです
クライアント側
while(1) {
fd_set rfds, wfds;
FD_ZERO(&rfds);
FD_ZERO(&wfds);
FD_SET(serverSocket, &rfds);
FD_SET(serverSocket, &wfds);
if(select(serverSocket+1, &rfds, &wfds, NULL, NULL) < 0) {
perror("select");
exit(-1);
}
if (FD_ISSET(serverSocket, &rfds)) {
// we got data, read it
}
if (FD_ISSET(serverSocket, &wfds)) {
printf(">");
// read keyboard
sendLen = 0;
while ((cmd[sendLen] = getchar()) != '\n')
sendLen++;
cmd[sendLen] = '\0';
// send the data
}
}