try
          //发送文件的内容
          GetMem(bufSend, iBYTEPERSEND);
          iNum := fsSend.Read(bufSend^, iBYTEPERSEND);
          FormMain.ClientSocket.Socket.SendBuf(bufSend^, iNum);
          FormChat.Memo1.Lines.Add('Send Buf finished');
        finally
          FreeMem(bufSend);
        end;
如何在每次发送的数据前面加上特定的开始和结束的标记,例如:'*’等

解决方案 »

  1.   

    如果你的bufSend定义成PChar可以这样用;GetMem(bufSend, iBYTEPERSEND+1);
    iNum := fsSend.Read(Pchar(bufSend+1), iBYTEPERSEND);
    bufSend[0] := '*'
    就行了。
      

  2.   

    再发一个例子给你
    var
      P : Pchar;
    begin
      GetMem(P,3);
      Strcopy(Pchar(P+1),'aa');
      P[0] := 'A';
      Showmessage(P);
      FreeMem(P);
    end;
    这样显示的结果是'Aaa'
      

  3.   

    kiboisme(还是铁棒.....针)这家伙真的磨成针了哦,那么厉害,想**大哥学习
      

  4.   

    Var
    fsSend:TFileStream;
    这句代码会出错?
    iNum := fsSend.Read(Pchar(bufSend+1), iBYTEPERSEND);
      

  5.   

    早说嘛,原来是TFileStream所。var
      P : Pchar;
      bufSend : Pchar;....GetMem(bufSend, iBYTEPERSEND+1);
    P := bufSend+1;
    iNum := fsSend.Read(P, iBYTEPERSEND);
    bufSend[0] := '*'
      

  6.   

    fsSend:=TFileStream.Create(FormChat.OpenDialog1.FileName,fmOpenRead);
              GetMem(bufSend, iBYTEPERSEND+1);
              P := bufSend+1;
              iNum := fsSend.Read(P, iBYTEPERSEND);
              bufSend[0] := '*';
              FormMain.ClientSocket.Socket.SendText(BufSend,iBYTEPERSEND);
        为何不行啊?
      

  7.   

    你用以下代码好
    Const
      iBYTEPERSEND = 1024;
    var
      fm : TFileStream;
      S : String;
      P : PChar;
    begin
      fm :=   TFileStream.Create('D:\ASP\UpFile.txt',fmOpenRead);
              SetLength(S, iBYTEPERSEND+1);
              P := Pchar(S);
              fm.Read(S[2], iBYTEPERSEND);
              P[0] := '*';
              FormMain.ClientSocket.Socket.SendText(BufSend,iBYTEPERSEND);
      fm.Free;
      SetLength(S,0);
    end;
      

  8.   

    FormMain.ClientSocket.Socket.SendText(BufSend,iBYTEPERSEND);
    应该是
    FormMain.ClientSocket.Socket.SendText(P,iBYTEPERSEND+1);
    因为你增加了一个长度
      

  9.   

    FormMain.ClientSocket.Socket.SendText(P,iBYTEPERSEND+1);这句好象要改成
    FormMain.ClientSocket.Socket.SendText(P);那相当的接收呢,我的代码收不到数据:
    //接收文件
        try
            fsRecv:=TMemoryStream.Create;
            GetMem(bufRecv, iBYTEPERSEND);
            iNum := ClientSocket.Socket.ReceiveBuf(bufRecv^, iBYTEPERSEND);
            fsRecv.WriteBuffer(bufRecv^, iNum);
          finally
            FreeMem(bufRecv);
          end;{of try}
            fsRecv.SaveToFile('C:\aaa.doc');
            fsRecv.Free;
          不知错在哪?