Hallo,
ich habe eine IOS App als Client und eine Delphianwendung als Server. Die Verbindung haut hin und ich kann auch Daten senden. Dann wird es problematisch ...
Das OnConnect und OnExecute des Servers wird einwandfrei abgearbeitet. Sende ich etwas an den Client im OnExecute, wird es vom Client allerdings nicht registriert. Erst wenn der Server die Verbindung zumacht (Disconnect), wird der Client das Gewahr. Leider ist der Empfangspuffer des Client leer.
Beende ich den Client, bekommt der Server das mit, denn dann wird die OnDisconnect Routine aufgerufen.
Ich dachte, dass die Connection so lange erhalten bleibt, bis sich entweder der Client oder der Server aus der Kommunikation verabschiedet. Es sieht für mich aber so aus, als ob für jedes Verbinden vom Client zum Server ein Connect, Execute und Disconnect gemacht werden muss. Ist das richtig ?
Die von mir gesendeten Daten versende ich mit folgender Befehlssequenz:
Code:
function TForm1.SendResponse (AContext: TIdContext; cResponse: string): boolean;
var
lines: TStringlist;
crPos, i: integer;
line: string;
begin
lines := TStringlist.Create;
try
while length (cResponse) > 0 do begin
crPos := pos (#13+#10, cResponse);
if crPos = 0 then begin
Line := cResponse;
cResponse := '';
end else begin
Line := copy (cResponse, 1, crPos-1);
cResponse := copy (cResponse, crPos+2);
end;
Log (C_SENT, format ('[%s]', [line]));
lines.Add(line);
end;
AContext.Connection.Socket.Write (lines, TRUE, TEncoding.ANSI);
AContext.Connection.Socket.WriteBufferFlush;
finally
lines.Free;
end;
end;
Leider ist der Empfangspuffer des Client immer leer.
Danke,
Andree