在服务器和主机建立socket连接后,客户端向服务器监听程序写数据(比如1个char),由
于客户端某种原因,导致了相邻的两次操作都为write,而且间隔时间较短,结果服务器只
接受到了前一个,第二个丢失了(应该两次write操作是在服务器处理过程中,结果只接受
到了一个)。服务器用select调用。有没有可以在连续write的时候强制刷新输出缓冲区的
方法?目前可以用sleep或者加一个大的空循环解决,不过对效率会有影响。谢谢!

解决方案 »

  1.   

    服务器:rec(在接收线程中)
    客户端:
    assert(willSendNum>0);
    int sendNum=send(...,willSendNum);
    if( sendNum==-1 ){
       return;
    }
    int leftNum=willSendNum-sendNum;
    while( leftNum>0 ){
      sendNum=send(...,leftNum);
      leftNum=leftNum-sendNum;
    }
      

  2.   

    开发;卓越呼叫中心、三农热线”语音农业综合信息服务平台、卓越办公自动化软件、卓越电厂MIS系统、卓越客户关系管理系统、卓越网站制作、卓越医疗信息管理系统;沈阳卓越科技有限公司;www.excellence-tech.com
      

  3.   

    开发;卓越呼叫中心、三农热线”语音农业综合信息服务平台、卓越办公自动化软件、卓越电厂MIS系统、卓越客户关系管理系统、卓越网站制作、卓越医疗信息管理系统;沈阳卓越科技有限公司;http://www.excellence-tech.com