TCP/IP Sockets |
EinführungSockets sind die Standardschnittstelle für TCP/IP. Sie werden verwendet, um Datendurch 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/ServerEs 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
FehlercodesDie 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 |