写一个网络程序,其中Socket.ReceiveLength; 
不能跟socket.ReceiveText;共存  
两个在一起用的话,会出现错误匡,但是两个又必须要用到。这个问题如何解决我很菜。请指点!!
这个问题怎么解决

解决方案 »

  1.   

    begin
        iLength:=Socket.ReceiveLength; //了解到达缓冲区的字节数
        GetMem(bufRecv,iLength);//分配内存
        try
          Socket.ReceiveBuf(bufRecv^,iLength);  //接收数据包并读入缓冲区内
          sTemp:=StrPas(PChar(bufRecv));
          sTemp:=Copy(sTemp,1,5);
          if sTemp='11111' then
            begin
            sTemp:=Trim(StrPas(PChar(bufRecv)));
            sFileName:=ExtractFileName(Copy(sTemp,6,Length(STemp)));
            //在这里拒绝
            SaveDialog1.Title:='保存下载文件:';
            SaveDialog1.FileName:=sFileName;
            if SaveDialog1.Execute then
              begin
                stream:=TFileStream.Create(SaveDialog1.FileName,fmCreate);
                //如果愿意接收数据。
                //memo1.Lines.Add ('开始接收!');//??????
                TickCount:=GetTickCount;
                Socket.SendText('33333');
                //通知发送端发送数据。
                bStart:=False;
              end
              else
              Socket.SendText('22222');
              end  else if sTemp='00000' then
              begin
              //要发送StrToInt(Copy(sTemp,2,Length(sTemp))) 次
              //时间进度显示
              //iRecvLength:=StrToInt(Copy(sTemp,2,Length(sTemp)));//;1024
              Socket.SendText('44444');
          //接收文件长度并要求继续传送数据。
              end else if sTemp='44444' then
              begin
              Socket.SendText('55555');
              //要求发送端发送数据。
              //准备好接收数据。
              end else if sTemp='77777' then
              begin
              //memo1.Lines.Add ('MP_OVER');//??????
              stream.Free;
              end else if sTemp='99999' then//文件传送结束。
              begin
              //memo1.Lines.Add ('结束!'+IntToStr(GetTickCount-TickCount));//??????
              stream.Free;
              end else if sTemp='66666' then
              begin
              //memo1.Lines.Add ('MP_ABORT');//??????
              stream.Free;
              end else
              begin
              if not bStart then
              begin
              //memo1.Lines.Add('接收数据...');//??????
              bStart:=True;
              end;
              stream.WriteBuffer(bufRecv^,iLength);//
              Socket.SendText('44444');
              end;
        finally
        FreeMem(bufRecv,iLength);
        //FreeMem(bufRecv,2000);
        end;
     end;以上这段代码是接收文件的。。不能和strback:=socket.ReceiveText;
        strfile:=copy(strback,6,length(strback)-5);
        if pos('list!',strback)=1 then  //文件
        begin
        listbox1.Items.Text:=strfile;
        end;这段代码用在一起。。我把代码都贴出来了。。希望高手指点如何让他们共存啊···
      

  2.   

    sforever (人在江湖飘,谁能不挨刀.) 
    先up
      

  3.   

    使用socket。ReceiveBuf()函数代替socket.ReceiveText