TCP/IP Sockets

Einführung

Sockets sind die Standardschnittstelle für TCP/IP. Sie werden verwendet, um Daten
durch das Netzwerk zu senden. Jeder Rechner im Netzwerk hat eine Adresse, vergleichbar
mit einer Telefonnumer. Um Daten zu senden, müssen wir die richtige Adresse und
Portnummer kennen.

Die Portnummer indentifiziert den Service. Wenn du durchs Web surfst dann benutzt du
80, http. Der download einer Datei vom FTP Server geht über Port 21, etc.

Die Portnummern haben einen Bereich von 0 - 65535. Die Nummern bis 1023 sind Reserviert für Standarddienste. Deshalb sollten wir nur Nummern von 1024 aufwärts verwenden.

Client/Server

Es gibt zwei Arten von Sockets: Client und Server.
Jetzt ist es Zeit für ein kleines Beispiel. Nehmen wir mal an, wir haben zwei Rechner
in einem Netzwerk:

foo (192.168.1.1), bar (192.168.1.2)

Wir möchten, dass foo der Server ist und bar der Client.
Foo wartet an Port 2000 auf eine eingehende Nachricht. Der Client fragt nach einer
Nachricht und sendet sie an den Server.


//  simple server ---------------------------------------------------

    #setreg_l       L0, null;
    #setreg_l       L1, one;
    #setreg_l       L2, port;
    #setreg_l       L3, len;

    string buf[256];

    push_i          0, null;
    push_i          1, one;
    push_i          2000, port;

    ssopen          null, "192.168.1.1", port;
    ssopenact       null;

    sread_l         null, len;
    sread_s         null, buf, len;
    
    print_s         "message: ";
    print_s         buf;
    print_n         one;
    
    sscloseact      null;
    ssclose         null;
    
    exit            null;
    

//  simple client ---------------------------------------------------

    #setreg_l       L0, null;
    #setreg_l       L1, one;
    #setreg_l       L2, port;
    #setreg_l       L3, len;

    string buf[256];

    push_i          0, null;
    push_i          1, one;
    push_i          2000, port;

    print_s         "message? ";
    input_s         buf;
    strlen          buf, len;

    scopen          null, "192.168.1.1", port;
    
    swrite_l        null, len;
    swrite_s        null, buf;

    scclose         null;

    exit            null;

Befehle

    L = long Register, D = double Register, BV = byte Variable, SV = string Variable

open/close

    ssopen          L (Socketnummer), SV (ip), L (Port); Server Socket öffnen
    ssopenact       L (Socketnummer);                    auf Clients warten
    sscloseact      L (Socketnummer);                    Verbindung schliessen
    ssclose         L (Socketnummer);                    Server Socket schliessen

    scopen          L (Socketnummer), SV (ip), L (Port); Client Socket öffnen
    scclose         L (Socketnummer);                    Client Socket schliessen

read/write

    sread_b         L (Socketnummer), L;                 lese byte
    sread_ab        L (Socketnummer), BV, L (Länge)      lese byte array
    sread_i         L (Socketnummer), L;                 lese int
    sread_l         L (Socketnummer), L;                 lese lint
    sread_d         L (Socketnummer), D;                 lese double
    sread_s         L (Socketnummer), SV, L (Länge);     lese string
    sread_ls        L (Socketnummer), SV;                lese line

    swrite_b        L (Socketnummer), L;                 schreibe byte
    swrite_ab       L (Socketnummer), BV, L (Länge)      schreibe byte array
    swrite_i        L (Socketnummer), L;                 schreibe int
    swrite_l        L (Socketnummer), L;                 schreibe lint
    swrite_d        L (Socketnummer), D;                 schreibe double
    swrite_s        L (Socketnummer), S;                 schreibe string

    swrite_sl       L (Socketnummer), L;                 schreibe lint als String
    swrite_sd       L (Socketnummer), D;                 schreibe double als String

    swrite_n        L (Socketnummer), L;                 schreibe "L" neue Zeilen
    swrite_sp       L (Socketnummer), L;                 schreibe "L" Leerzeichen

Sonstige

    hostname        SV (Name);                           gibt den lokalen Hostnamen zurück
    hostbyname      SV (Name), SV (ip);                  gibt die ip zurück
    hostbyaddr      SV (ip), SV (Name);                  gibt den Namen zurück

    clientaddr      L (Socketnummer), SV (ip);           gibt die Client ip, bei
                                                         einem Server Socket, zurück

Fehlercodes

Die Socket Befehle geben einen Fehlercode in der Variablen "_sock" zurück.
Sehe dir dazu die Beispiele "client.na" und "server.na" für mehr an.


line feed (neue Zeile)

Der line feed kann mit der Variablen "_fnewline" gesetzt werden.
Benutze nur LF oder CRLF bei Sockets.

siehe Dateien



Prev: Speicher Fehlercodes | Next: Prozesse