我在使用WINSOCKET API函数时,因为服务方是个转发服务器,有时读的信息不能立即返回,或只返回部分,等待时间不定,怎样才能使数据能正确接收

解决方案 »

  1.   

    简单事例如下,监测Socket是否有数据可读,不知道是否符合要求如果符合要求的话,那为什么不用消息呢?var
      FDSet: TFDSet;
      TimeVal: TTimeVal;
      Str: string;
    begin
      while true do
      begin
        FD_ZERO(FDSet);
        FD_SET(FSock, FDSet);
        TimeVal.tv_sec := 0;
        TimeVal.tv_usec := 1000;
        if select(0, @FDSet, nil, nil, @TimeVal) > 0 then
        begin
          ReadPacket(Pointer(str)^, FSock);
          Break;
        end;
      end;
    end;
      

  2.   

    var
      c: char;
      ret: Integer;
    Ret := recv(socket, c, 1, MSG_PEEK);
    if ret = 1 then
      有数据在缓冲
      

  3.   

    这里找不到你满意的答案吗?来这里试试!
    这里有问必答
    http://systemer.51.net/cgi-bin/leoboard.cgi
    希望你能在这里找到你满意的答案!
      

  4.   

    Delphi的Socket控件就是使用我所说的方法的他是启动一个线程去轮询Socket的,如果发现可读或可写就通知程序