您的位置:程序门 -> vc/mfc -> 网络编程



急,api函数recv无法接收到数据的问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


急,api函数recv无法接收到数据的问题
发表于:2007-04-05 16:46:29 楼主
我碰到了以下问题,望大家帮忙解决,谢谢
我的代码是(平台是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中也有数据。不知为什么,谢谢。
发表于:2007-04-05 17:09:581楼 得分:0
select   (   1   ,   &ready,   0,   0,   &vtimeout)   ;在windows和linux下用法是不一样的
发表于:2007-04-05 17:14:342楼 得分:0
为什么不用fd_isset(cscoket,&ready)判断呢?
发表于:2007-04-05 17:20:023楼 得分:0
if(   fd_isset(cscoket,&ready)   )
{
    recv(...)
}
发表于:2007-04-05 17:38:204楼 得分:0
使用fd_isset吧,而且unix下数据包是一个字节一个字节发送的
发表于:2007-04-05 22:38:485楼 得分:0
有道理,用fd_isset(cscoket,&ready)判断
发表于:2007-04-06 08:07:006楼 得分:0
我已经用过fd_isset(cscoket,&ready)判断,他返回的是true但是buff中就是没有数据。问一下fengge8ylf(秀视工作室,承接p2p项目)   这位朋友select函数在linux是如何用的,谢谢
发表于:2007-04-06 09:00:287楼 得分:0
mark~~
发表于:2007-04-06 09:05:438楼 得分:0
up
发表于:2007-04-06 14:19:539楼 得分:0
up
发表于:2007-04-06 14:24:4410楼 得分:0
在windows与unix平台进行socket编程时,有时候会出现recv数据不完整的情况,举个例子,你读20个字节,有时候一次只能读出8个字节,需要程序里边做相应的处理
发表于:2007-04-06 15:07:1411楼 得分:0
问题是我一个内容都没收到呀,帮帮我吧
发表于:2007-04-06 23:44:0512楼 得分:0
我帮你up,嘿嘿
发表于:2007-04-09 08:16:5213楼 得分:0
up


快速检索

最新资讯
热门点击