Hier geht es nicht um die Darstellung. Insofern ist es egal, ob du String oder PChar nimmst, aber bei beidem musst du erst Speicher reservieren!
Delphi-Quellcode:
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
p_text:pansichar;
begin
me_meg.Lines.Add('client msg: '+Socket.ReceiveText); //Mit ReceiveText wird der interne Puffer geleert - die Daten sind futsch!
Socket.ReceiveBuf(p_text,Socket.ReceiveLength); //Ein PChar ist nur ein Zeiger. Du kannst keinen Zeiger empfangen!
write(p_text);
end;
Du musst dir mit GetMem Speicher reservieren und dann mit diesem Speicher arbeiten und ihn mit FreeMem wieder freigeben.
In den anderen Funktionen sind auch noch Fehler drin, aber im Prinzip ist es immer der gleiche wie oben.