我碰到了以下问题,望大家帮忙解决,谢谢
我的代码是(平台是W2kserver):
  char buffer[400]={0};
    int count =512;
    FD_ZERO(&ready);
    FD_SET( CSocket , &ready);
    int r = 0;
    int reclen = 0;
    r =  select ( 1 , &ready, 0, 0, &VTimeOut) ;
    if ( r >  0)
    {
       reclen = recv ( CSocket , buff , count , 0 ) ;
       if (reclen > 0)
         return reclen;   // 读到数据,正常返回
       else
         {
           return -1;       //  有错误发生
           Active = false;
         }
     }
问题是我在与unix系统平台上的软件通讯的时候r返回的是1,而reclen返回的是-1,buff中没数据,而同样的程序,与WINDODS系统平台上的软件通讯的时候buff就有数据。同时我又在windows平台中写了一个通讯程序(使用C++BUILDER6中的socket通讯控件做的)与unix系统平台上的软件通讯的时候buff中也有数据。不知为什么,谢谢。

解决方案 »

  1.   

    select ( 1 , &ready, 0, 0, &VTimeOut) ;在WINDOWS和LINUX下用法是不一样的
      

  2.   

    为什么不用FD_ISSET(CScoket,&ready)判断呢?
      

  3.   

    if( FD_ISSET(CScoket,&ready) )
    {
      recv(...)
    }
      

  4.   

    使用FD_ISSET吧,而且unix下数据包是一个字节一个字节发送的
      

  5.   

    有道理,用FD_ISSET(CScoket,&ready)判断
      

  6.   

    我已经用过FD_ISSET(CScoket,&ready)判断,他返回的是true但是buff中就是没有数据。问一下fengge8ylf(秀视工作室,承接P2P项目) 这位朋友select函数在LINUX是如何用的,谢谢
      

  7.   

    在windows与unix平台进行socket编程时,有时候会出现recv数据不完整的情况,举个例子,你读20个字节,有时候一次只能读出8个字节,需要程序里边做相应的处理