Deutsch English
Alphabetischer Index
Array-Funktionen
CGI-Funktionen
Datentypen
Datums/Uhrzeit-Funktionen
Debugging
Operatoren
Ramtext-Funktionen
Selektion
Socket-Funktionen
  • closesock()
  • getsock()
  • opensock()
  • putsock()
  • server()
    Sonstige-Funktionen
    Sprachelemente
    Statistik-Funktionen
    Stream-Funktionen
    String-Funktionen
    System-Funktionen
    Tabellen-Funktionen
    Text-Funktionen
    Volltext-Funktionen
    Zahlen-Funktionen
    Home    Überblick    Suche    Impressum    Kontakt    Mitglieder
    Themenkomplex Socket-Funktionen
    Funktion getsock()
    Kurz Liest Daten aus einer bestehenden TCP-Verbindung
    Syntax getSock(socket : INTEGER; VAR p : { CHAR[{offset}] | BYTE[{offset}] }; maxchars : INTEGER) : INTEGER
    Parameter socket : von openSock() generiertes Socket-Handle
    p : beliebig grosses Ein-Zeichen-Array, entweder vom Typ CHAR oder BYTE
    offset : Startposition im Array, ab der die eingelesenen Zeichen abgelegt werden sollen
    maxchars : Anzahl der einzulesenden Bytes / Zeichen
    Ergebnis Anzahl der tatsächlich eingelesenen Bytes / Zeichen
    Siehe auch:
    opensock() closesock() putsock()
    Beschreibung getSock() liest die über die geöffnete Verbindung "hereinströmenden" Zeichen und legt diese in einem Array ab.
    Da grössere Datenmengen immer in meist gleichgrosse TCP-Pakete aufgeteilt werden, kann es sein, dass man, um die gesamte Informationseinheit einlesen zu können, eine Schleife benötigt.

    Beispiel:
    while nReadBytes := nReadBytes + getSock(s, a[nReadBytes], nBytesToRead) < nBytesToRead do nBlocksRead++ end
    


    Jenachdem in wie viele kleinere Einheiten die nBytesToRead grosse Datenmenge unterteilt wurde, usmo mehr Durchläufe (nBlocksRead) braucht diese Schleife. nBytesRead ist oftmals eine Zahl im Bereich von 1500, einer beliebten Grössenbeschränkung im Netzwerk.

    Beispiel 1: SMTP-Client

    Ein SMTP Client

    PROCEDURE send_str(s : INTEGER; l : STRING);
    VAR p : CHAR[1000];
      p[0]:=l+^M+^J; PutSock(s,p,length(l)+2)
      cgiwriteln('> '+l)
    ENDPROC
    PROCEDURE recv_str(s : INTEGER) : STRING;
    VAR p : CHAR[1000];
    VAR i : INTEGER;
    VAR res : STRING;
      nloop(i,GetSock(s,p,1000)-1,res:=res+p[i]);
      RETURN res
    ENDPROC
    
    PROCEDURE Main;
    VAR p : CHAR[1000];
    VAR i : INTEGER;
      cgiclosebuffer;
      cgiwriteln('content-type: text/plain');
      cgiwriteln('');
      IF i:=OpenSock('mail.tdb-engine.de:25') THEN
        cgiwriteln(recv_str(i));
        send_str(i,'HELO mail.tdb.de');
        cgiwriteln(recv_str(i));
        send_str(i,'MAIL FROM:test@tdb-engine.de');
        cgiwriteln(recv_str(i));
        send_str(i,'RCPT TO:test2@tdb-engine.de');
        cgiwriteln(recv_str(i));
        send_str(i,'DATA')
        cgiwriteln(recv_str(i));
        send_str(i,'Das ist ein kleiner Test.');
        send_str(i,'Und das ist die zweite Zeile');
        send_str(i,'.');
        cgiwriteln(recv_str(i));
        send_str(i,'QUIT');
        cgiwriteln(recv_str(i));
        CloseSock(i)
      ELSE
        cgiwriteln('done.')
      END
    ENDPROC
    


    tdbengine chat
    irc.tdbengine.org
    #tdbengine

       Copyright © 2003-2004 tdb Software Service GmbH
       Alle rechte vorbehalten. / All rights reserved
       Letzte Änderung: 21.10.2004
    {Fehler für :execmacro{execmacro="sessionspy"}