服务端接收程序代码
       if pagi < pagshu then
       begin
            try
                  iRecvLength:=2048;
                  GetMem(bufRecv,2048);//2000 must >iBYTESEND
                  Socket.ReceiveBuf(bufRecv,iRecvLength);
                  fsRecv.WriteBuffer(bufRecv,iRecvLength);
             finally
                  FreeMem(bufRecv,2048);
             end;{of try}
             bReadText:=true;
             Socket.SendText(MP_NEXTWILLBEDATA);
             pagi:=pagi+1;
       end
       else
       begin
           //'接收最后一个数据包
            try
                  iRecvLength:=2048;
                  GetMem(bufRecv,3000);//2000 must >iBYTESEND
                  Socket.ReceiveBuf(bufRecv,iRecvLength);
                  fsRecv.WriteBuffer(bufRecv,iRecvLength);             finally
                  FreeMem(bufRecv,3000);
             end;{of try}
             bReadText:=true;
             Socket.SendText(MP_OVER);
             showmessage('接收完毕!');
       end;

解决方案 »

  1.   

    是pchar类型出错,你应该改为字符数组来接受数据.
    var
      bufRecv : array[0..3000] of char;
    begin
    if pagi < pagshu then
           begin
    //            try
                      iRecvLength:=2048;
                       fillchar(bufrecv, 3000,0);
                     // GetMem(bufRecv,2048);//2000 must >iBYTESEND
                      Socket.ReceiveBuf(bufRecv,iRecvLength);
                      fsRecv.WriteBuffer(bufRecv,iRecvLength);
    //             finally
    //                  FreeMem(bufRecv,2048);
    //             end;{of try}
                 bReadText:=true;
                 Socket.SendText(MP_NEXTWILLBEDATA);
                 pagi:=pagi+1;
           end
           else
           begin
               //'接收最后一个数据包
    //            try
                      iRecvLength:=2048;
                      fillchar(bufRecv, 3000);
    //                  GetMem(bufRecv,3000);//2000 must >iBYTESEND
                      Socket.ReceiveBuf(bufRecv,iRecvLength);
                      fsRecv.WriteBuffer(bufRecv,iRecvLength);//             finally
    //                  FreeMem(bufRecv,3000);
    //             end;{of try}
                 bReadText:=true;
                 Socket.SendText(MP_OVER);
                 showmessage('接收完毕!');
           end;
    end;
      

  2.   

    还是同样的错误
    发送方是不是也不用pchar
      

  3.   

    发送方已改为:  还是不行
     MP_DATA:
     begin
           try
                   fillchar(bufsend, 3000,0);
                 if   pagi < pagshu then
                 begin
                      fsSend.Read(bufSend,2048);
                      Socket.SendBuf(bufSend,2048);
                 end //普通的发送,大小为iBYTEPERSEND
                 else
                 if    (fsSend.Position+1) < fsSend.Size  then
                 begin
                     fsSend.Read(bufSend,fsSend.Size-fsSend.Position-1);
                      Socket.SendBuf(bufSend,fsSend.Size-fsSend.Position-1);
                 end;//最后一次发送,发送剩余的数据
           finally
                 BEGIN
                 END;
           end;{of try}
        end;