Woher hast du das Beispiel da oben denn? Ich würde jedenfalls sagen, dass das nur in den seltensten Fällen so funktionieren kann. Versuch es doch mal nach folgendem Schema...
Client:
Code:
procedure SendeDaten;
var
Rec: TInfo;
begin
Rec.Zahl := 123;
Rec.Zahl2 := 456;
Client.SendBuf(Rec, SizeOf(Rec));
end;
Server:
Code:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
Info: TInfo;
begin
if Socket.Peek >= SizeOf(Info) then
Socket.ReadBuf(Info, SizeOf(Info));
end;
Du musst eben immer prüfen, ob schon alle Daten da sind, die du einlesen möchtest (hier mit der Methode Peek(), die es vermutlich so nicht gibt an deiner Klasse). Einfach in einen Record lesen, obwohl keine Daten da sind, geht dann schief, und deine
Exception "'' ist kein gültiger Integerwert" deutet darauf hin, dass ReceiveText() keine Daten bekommt und StrToInt() daneben geht. Achja, ausserdem dürfen keine normalen Strings in dem Record enthalten sein, wenn man ihn so verschickt/empfängt.
Wenn du flexibel sein möchtest, solltest du das Protokoll vielleicht auch etwas ändern. Man könnte vielleicht Kommandolänge+Kommandotyp+Nutzdaten nehmen, also schickt der Client zwei Integers und dann die Nutzdaten, der Server wartet mit dem Auslesen, bis er die Mindestlänge empfangen hat (den ersten Integer für die Länge). Wenn dieser da ist, weiß der Server, auf wieviele Bytes er noch warten muss. Ist dann alles da, kann man das Paket auseinandernehmen und verarbeiten.