Einzelnen Beitrag anzeigen

AnyH

Registriert seit: 10. Okt 2012
3 Beiträge
 
#1

Wann und wie lange bleibt eine TidTCPServer-Verbindung offen ?

  Alt 10. Okt 2012, 13:28
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
  Mit Zitat antworten Zitat