TSendTxt=packed Record
    Size:integer;
    text:array [0..127] of char;
    Param:integer;
    Value:integer;
  end;procedure TfrmTtsServer.sckServerClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  SendTxt:TSendTxt;
  Buffer:array [0..102400]of char;
  i,PacketLen,Receivelen :integer;
begin
  //Socket.SocketHandle
  tmWait.Enabled :=true;
  PacketLen := SizeOf(TSendTxt);
  ReceiveLen := Socket.ReceiveLength;
  if (ReceiveLen mod PacketLen) <> 0 then
    Exit;
  Socket.ReceiveBuf(Buffer, ReceiveLen);
  for i := 0 to ReceiveLen div SizeOf(TSendTxt) - 1 do
  begin
    Move(Buffer, SendTxt, PacketLen);
    memo1.Lines.Add('rec '+inttostr(Socket.SocketHandle));
    ReceiveData(sendTxt,socket.SocketHandle);
    //socket.SendBuf(sendtxt,sizeof(TsendTxt));
    Move(Buffer[PacketLen], Buffer, ReceiveLen - (i + 1) * PacketLen);
  end;
end;//发
function TForm1.SendTxt(ChannelNo:integer; sSendText: string):boolean;
var
  len:integer;
  SendTxt:TSendTxt;
  isize:integer;
  buf:string;
  iId:integer;
begin
  Len := length(sSendText);
  FillChar(SendTxt,sizeof(TsendTxt),0);
  SendTxt.Value := tbSpeed.Position;
  if len=0 then
  begin
    Result:=false;
    exit;
  end;
  repeat
    if len>128 then
    begin
    {mbSingleByte 单字母
     mbLeadByte 双字节第一位
     mbTrailByte 双字节第二位
    }
     if  ByteType(sSendText,128)=mbLeadByte then//末尾是否为半个汉字
     begin
       iSize:=127;
       Buf:=copy(sSendText,1,127);
       sSendText:=copy(sSendText,128,Len-127);
       Len := Len-127;
     end
     else
     begin
       iSize:=128;
       Buf:=copy(sSendText,1,128);
       sSendText:=Copy(sSendText,129,len-128);
       len:=len-128;
     end;
    end
    else
    begin
      iSize:=len;
      buf:=sSendText;
      sSendText:='';
      len:=0;
    end;
    //send
    sendtxt.Size := iSize;
    strpcopy(SendTxt.text,buf);
    iId:=VocStatu[ChannelNO].ComponentId;    if  Components[iId] is TClientSocket then
     (Components[iId] as TClientSocket).Socket.SendBuf(Sendtxt,sizeof(TSendTxt))
    else
      caption:=Components[iId].Name;  until len<=0end;