大致代碼如下:var
Input,Output,Key:PChar;
......
Getmem(Input,128);
    Getmem(Output,128);
    Getmem(Key,16);
    Fillchar(Input^,128,#0);
    Fillchar(Key^,16,#0);
    Fillchar(Output^,128,#0);
    CopyMemory(Key,PChar(md5.MD5Print(md5.MD5String(Copy(ver,0,16)+copy(key1,17,16)))),16);
    CopyMemory(Input,PChar(Copy(restr,34,Length(restr)-33)),Length(restr)-33);
    DES(Output,Input,128,Key,16,False);
    AContext.Connection.Socket.Write(Output);
    Freemem(Input);
    Freemem(Output);
    Freemem(Key);這樣子在客戶端接收到的都是不定長的數據,很難處理。想向大家請教下怎么樣可以達到我想要的目的,也就是標題上提到的。謝謝

解决方案 »

  1.   

    發送的長度是 length(Output)?
      

  2.   

    Write应该可以指定发送的长度.由于你这版本比较老,我这里找不出来,所以不清楚实际是如何的参数.
    Output也可以定义为String,GetMem(Output,128)可以换为SetLength(Output,128)
      

  3.   

    CopyMemory(Key,PChar(md5.MD5Print(md5.MD5String(Copy(ver,0,16)+copy(key1,17,16)))),16);我打印出來發現上面那個操做得到的key有時候 是16位有時候是17位怎么辦各位?
      

  4.   

    不要用Copy,把所有PChar改用String.
      

  5.   

    不用copy的話有什么好的辦法截取字符串?
      

  6.   

    SetString把PChar的数据复制到String.