c套接字:刷新数据,让客户端知道可以键入

c套接字:刷新数据,让客户端知道可以键入,c,sockets,stdin,C,Sockets,Stdin,我在客户端实现多个客户端连接的客户端-服务器聊天程序时遇到问题。问题是,我遇到的是,我如何让客户知道可以输入一些内容?目前,我的printf语句没有输出到屏幕。有没有一种方法可以让我通知客户不用换行就可以打字 这是相关代码 客户端 由于默认情况下stdout是行缓冲的,因此您至少有两个选择: 在没有换行符的情况下写入标准输出后显式刷新。试一试福卢斯杜特;正如Ganeesh所建议的那样。 为整个程序关闭标准输出上的缓冲。请尝试setvbufstdout,NULL,_IONBF,0;。您可以在此处看

我在客户端实现多个客户端连接的客户端-服务器聊天程序时遇到问题。问题是,我遇到的是,我如何让客户知道可以输入一些内容?目前,我的printf语句没有输出到屏幕。有没有一种方法可以让我通知客户不用换行就可以打字

这是相关代码

客户端


由于默认情况下stdout是行缓冲的,因此您至少有两个选择:

在没有换行符的情况下写入标准输出后显式刷新。试一试福卢斯杜特;正如Ganeesh所建议的那样。 为整个程序关闭标准输出上的缓冲。请尝试setvbufstdout,NULL,_IONBF,0;。您可以在此处看到这样一个示例:
printf>;->>fprintfstderr,>\n;这是正在输出的。你能用一个fflushstdout试试吗;打印后?@wildplasser发布您的解决方案,以便我将其标记为答案。有点像黑客,但我想在这种情况下是可行的。除非有人有更好的选择。@theStig:不,我不会。这确实是一件小事:诊断输出应该转到stderr。而且stdstuff是行缓冲的。顺便说一句:如果SelectServerSocket+1,&rfds,NULL,NULL,NULL<0{是错误的。select可能返回-1/EAGAIN,等等。哇,我需要休息一下。我认为fflush是个坏主意,因为我在使用stdin…但我不是。那个printf将成为stdout。谢谢
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
  }
}