0

複数のクライアントが接続するクライアントサーバーチャットプログラムのクライアント側の実装に問題があります。問題は、私が遭遇しているのは、クライアントに何かを入力しても大丈夫であることをどのように知らせるのかということです。現在、私のprintfステートメントは画面に出力されていません。改行を使用せずに入力しても問題がないことをクライアントに通知する方法はありますか?

これが関連するコードです

クライアント側

while(1) {
  printf(">"); //this isn't being outputted

  fd_set rfds;
  FD_ZERO(&rfds);

  FD_SET(serverSocket, &rfds);
  FD_SET(0, &rfds);

  if(select(serverSocket+1, &rfds, NULL, NULL, NULL) < 0) {
      perror("select");
      exit(-1);
  }

  if (FD_ISSET(serverSocket, &rfds)) {
     //recv data from server
  }
  else if (FD_ISSET(0, &rfds)) {
     //read keyboard
  }
}
4

1 に答える 1

1

stdoutはデフォルトでラインバッファリングされているため、少なくとも2つの選択肢があります。

  1. 改行なしでstdoutに書き込んだ後、明示的にフラッシュします。fflush(stdout);Ganeeshの提案に従って試してください。
  2. プログラム全体でstdoutのバッファリングをオフにします。試してみてくださいsetvbuf(stdout, NULL, _IONBF, 0);。この例をここで見ることができます:stdoutとstderrでバッファリングを無効にするのは安全ですか?
于 2013-02-10T01:28:16.293 に答える