奇怪的问题?实在不明白为什么??

riverfly19871982 2009-08-08 08:35:32
今天写了一个网络通信的程序,就一个客户端一个服务器端,很简单的程序实现相互发送消息,用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 :%s\n",buf); }
即只是在printf函数中加了换行符,之前的问题就解决了,服务器发送的消息,客户端可以立即接收到,不用等到自己发送消息后才接收到。不过真是不明白这是为什么??请高人指点。。。。
...全文
61 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
riverfly19871982 2009-08-10
  • 打赏
  • 举报
回复
呵呵,谢谢各位!刚调了一个程序,大致明白了。。。
gamedragon 2009-08-09
  • 打赏
  • 举报
回复
2楼正解
tw4452852 2009-08-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mymtom 的回复:]
终端是行缓冲的,加换行符才把缓冲区的内容送到终端,
如果不加换行符,可以用fflush(stdout);
[/Quote]
正解!
chenee543216 2009-08-08
  • 打赏
  • 举报
回复
blocking,setnoblocking

fcntl( 0, F_SETFL, O_NONBLOCK);

mymtom 2009-08-08
  • 打赏
  • 举报
回复
终端是行缓冲的,加换行符才把缓冲区的内容送到终端,
如果不加换行符,可以用fflush(stdout);

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧