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; BefehleL = long Register, D = double Register, BV = byte Variable, SV = string Variable open/closessopen 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/writesread_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 Sonstigehostname 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 |