谢谢大虾
         关键部分最好有原代码

解决方案 »

  1.   

    //发送的,
    Procedure TForm1.SendStream();
    Var
      sendsize: longint;
      Buf: Array[0..BufSize - 1] Of char;
      ReceivedString: String;
    Begin
      If LeftSize <= 0 Then
        Begin
          stream.Clear;
          exit;
        End;
      If LeftSize > BufSize Then
        SendSize := BufSize
      Else
        SendSize := LeftSize;
      stream.ReadBuffer(buf, SendSize);
      LeftSize := LeftSize - SendSize;
      Try
        IdUDPClient1.SendBuffer(Buf, SendSize);
      Except
        stream.Clear;
        showmessage('发送文件时出错!');
        exit;
      End;
      ReceivedString := IdUDPClient1.ReceiveString();
      If ReceivedString <> strflag Then
        Begin
          stream.Clear;
          showmessage('发送文件时出错!');
          exit;
        End
      Else
        sendstream();
    End;//下面是收的
    Procedure TForm2.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);
    Var
      Buf: Array[0..BufSize - 1] Of char;
      revsize: longint;
    Begin
      revsize := adata.Size;
      adata.ReadBuffer(Buf, revsize);  If sametext(copy(buf, 1, 8), '[Start] ') Then
        Begin
          filename := copy(buf, 9, revsize-8);
          ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, strflag[1],
            length(strflag));
          exit;
        End;//  If sametext(copy(buf, 1, 8), '[Send]  ') Then
    //    Begin
          stream.WriteBuffer(buf, revsize);
          ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, strflag[1],
            length(strflag));
          If revsize < BufSize Then
            Begin
              stream.Position := 0;
              Try
                stream.SaveToFile(extractfilepath(paramstr(0)) + filename);
              Except
              End;
              stream.Clear;
            End;
          exit;
    //    End;
    End;