2013-02-10 86 views
0

我在客户端实现多客户端连接的客户端服务器聊天程序时遇到问题。问题是,我遇到的问题是,如何让客户知道键入内容?目前,我的printf语句没有被输出到屏幕上。有没有一种方法可以通知客户,可以不使用新行来输入?c socket:刷新数据让客户端知道键入

这里是有关代码

客户端

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 
    } 
} 
+0

'printf(“>”);' - >>'fprintf(stderr,“> \ n”);'这是输出。 – wildplasser 2013-02-10 00:55:10

+2

你可以在'printf'之后用'fflush(stdout);'尝试一下吗? – Ganesh 2013-02-10 00:57:23

+0

@wildplasser发布您的解决方案,以便我可以标记为答案。黑客的位,但我想它在这种情况下工作。除非有人有更好的选择。 – theStig 2013-02-10 01:03:16

回答

1

由于标准输出默认情况下,行缓冲,至少有两个选择:

  1. 写入后显式冲水没有换行符的标准输出。按照Ganeesh的建议尝试fflush(stdout);
  2. 关闭整个程序的标准输出缓冲。尝试setvbuf(stdout, NULL, _IONBF, 0);。你可以在这里看到一个例子:Is it safe to disable buffering with stdout and stderr?
+0

哇,我需要休息一下。思考fflush是一个坏主意,因为我与标准输入工作...但我不是。该printf将要stdout。谢谢 – theStig 2013-02-10 01:30:39