当前位置: 技术问答>linux和unix
奇怪的问题?实在不明白为什么??
来源: 互联网 发布时间:2016-06-23
本文导语: 今天写了一个网络通信的程序,就一个客户端一个服务器端,很简单的程序实现相互发送消息,用select的io多路复用,但是遇到一个很奇怪的地方:之前我遇到的问题是:我服务器发送一个消息后,客户端并为显示接...
今天写了一个网络通信的程序,就一个客户端一个服务器端,很简单的程序实现相互发送消息,用select的io多路复用,但是遇到一个很奇怪的地方:之前我遇到的问题是:我服务器发送一个消息后,客户端并为显示接收到,只有当客户端发送消息时,才会把之前从服务器收到的消息显示出来,然后发送自己的消息给服务器。但是我将客户端程序代码如下部分: numbytes = recv(sockfd,buf,MAXBUF,0);
if(numbytes > 0)
{ printf("received :%s",buf); }
修改为:
numbytes = recv(sockfd,buf,MAXBUF,0);
if(numbytes > 0) { printf("received :%sn",buf); }
即只是在printf函数中加了换行符,之前的问题就解决了,服务器发送的消息,客户端可以立即接收到,不用等到自己发送消息后才接收到。不过真是不明白这是为什么??请高人指点。。。。
if(numbytes > 0)
{ printf("received :%s",buf); }
修改为:
numbytes = recv(sockfd,buf,MAXBUF,0);
if(numbytes > 0) { printf("received :%sn",buf); }
即只是在printf函数中加了换行符,之前的问题就解决了,服务器发送的消息,客户端可以立即接收到,不用等到自己发送消息后才接收到。不过真是不明白这是为什么??请高人指点。。。。
|
终端是行缓冲的,加换行符才把缓冲区的内容送到终端,
如果不加换行符,可以用fflush(stdout);
如果不加换行符,可以用fflush(stdout);