Programmieren mit sockets

Ähnliche Dokumente
Programmieren mit sockets

Programmierung mit sockets

Netzwerk-Programmierung. Netzwerke. Alexander Sczyrba Michael Beckstette.

Netzwerke. Netzwerk-Programmierung. Sven Hartmeier.

Netzwerk-Programmierung. Netzwerke.

Netzwerke. Netzwerk - Programmierung. Alexander Sczyrba. Madis Rumming.

Protokolle und Schichten. Grundlagen der Rechnernetze Einführung 41

Konsequenz für Forwarding Tabellen

Rechnernetze. 6. Übung

Protokollgraph. Host 1. Host 2. Protokoll 2. Protokoll 1. Protokoll 3. Protokoll 4. Grundlagen der Rechnernetze Einführung 46

. Nachrichtenübertragung. Internetkommunikation Christof Fox. Wie werden Nachrichten Übertragen?

Verteilte Systeme - Java Networking (Sockets) -

Client-Server TCP/IP - Kodierung

Adressauflösung. IP Adresse Physikalische Adresse :FF:AA:36:AB: :48:A4:28:AA:18

Themen. Transportschicht. Internet TCP/UDP. Stefan Szalowski Rechnernetze Transportschicht

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN

Netzwerk-Programmierung in C

Java und Netzwerkkommunikation

Mailserver Teil 1 Linux-Kurs der Unix-AG

Websockets. Verbindungskanal zwischen Client-Anwendung (JavaScript in Browser) und Server.

Client/Server-Systeme

Transmission Control Protocol (TCP)

Netzwerk Linux-Kurs der Unix-AG

Zusammenfassung für CS-Prüfung 3 Seite 1. CS-Zusammenfassung für Prüfung 3 vom Im Beispiel gibt es 3 Deadlocks

Installation und Betrieb des Virtual Serial Port Emulators (VSPE) Mai 2012

An Open Interface for Network Programming under Microsoft Windows. DI. Dr. Peter René Dietmüller

Client/Server-Systeme

Netzwerkprogrammierung unter Linux und UNIX

File Transfer Protocol

Python Programmierung. Dipl.-Ing.(FH) Volker Schepper

Client/Server-Systeme

Praktikum Netzwerke. Für den Speicherort tragen Sie Ihr Netzlaufwerk und entsprechende Unterverzeichnisse ein, z.b.:

Kommunikationsnetze. 2. Direkte TCP/IP-Verbindungen 2.1 Höhere Programmiersprachen

7. OSI-Modell als Rollenspiel

Lösung Übungszettel 6

Socket-Programmierung unter Java

Socket-Programmierung unter Java

4. Thread- und Netzwerk- Programmierung

Kommunikation von Prozessen: Signale und Pipes

knxpresso IP-Interface

Verbindungen zu mehreren Clients. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 23: Netzwerkprogrammierung/ Kommunikation 2

Berkeley Sockets 187

Computer and Communication Systems (Lehrstuhl für Technische Informatik) Socket-Programmierung

Byteorder bei Netzwerkkommunikation Netzwerkprogrammierung - Sockets Netzwerkprogrammierung - Verschiedenes

Client-Server TCP/IP - Kodierung

Logging, Threaded Server

Die Transportprotokolle: Transmission Control Protocol (TCP) User Datagram Protocol (UDP) Die Socket-Schnittstelle

Verteilte Systeme - 1. Übung

Praxis Linux-Administration

Installieren und Verwenden des Document Distributor 1

Komplexe Datenstrukturen

ARP, ICMP, ping. Jörn Stuphorn Bielefeld, den 4. Mai Mai Universität Bielefeld Technische Fakultät

TCP und UDP Sockets in Java

Kommunikation in Netzwerken Teil 2

Router für BT-Professional MOBILE konfigurieren

.NET Networking 1. Proseminar Objektorientiertes Programmieren mit.net und C# Matthias Jaros. Institut für Informatik Software & Systems Engineering

Kommunikation in Netzwerken Teil 2

Konfiguration einer Firewall mit FireHOL

Anleitung zur Konfiguration der TCP/IP-Kommunikation zwischen ArcGIS Lizenzmanager 10.5 und ArcGIS Desktop 10.5 Client(s) (Mai 2017)

TECHNICAL SUPPORT BULLETIN TLS4/TLS4B Thema: Verwendung von Putty an der seriellen RS-232 oder an der Netzwerk Schnittstelle über Port

1 Kommunikation im World-Wide-Web

Simple serial time and HTTP client API Version 00.75

Transkript:

Netzwerk-Programmierung Programmieren mit sockets Sven Hartmeier shartmei@techfak.uni-bielefeld.de

Übersicht Datentypen und Konversionsfunktionen minimaler Client minimaler Server Netzwerk-Programmierung Programmieren mit sockets 2/18

sockets API, erstmals in 4.2BSD (1983) sehr genereller Aufbau: TCP/IP named pipes OSI-Protokolle... C-Funktionen Adress- und Portinformationen in structs spezielle Perl-Funktionen zur Typkonversion Berkeley sockets Netzwerk-Programmierung Programmieren mit sockets 3/18

Namen und Adressen Netzwerk-Interface durch IP-Adresse identifiziert dotted quad-notation: 129.70.132.229 lesbare Namen durch Domain Name System (DNS) www.uni-bielefeld.de 129.70.240.4 keine Bijektion 129.70.4.66 pan1.hrz.uni-bielefeld.de keine mathematische Funktion www.cnn.com (64.236.24.20, 64.236.24.28,... ) Netzwerk-Programmierung Programmieren mit sockets 4/18

Adress-Konversion use Socket; Binärdarstellung für socket-funktionen $iaddr = inet_aton( 129.70.240.4 ); $iaddr = inet_aton( www.uni-bielefeld.de ); alternativ $iaddr = gethostbyname( www.uni-bielefeld.de ); andere Richtung: $dotquad = inet_ntoa($iaddr); Namen ermitteln $name = gethostbyaddr($iaddr, AF_INET); Netzwerk-Programmierung Programmieren mit sockets 5/18

Aufgaben Wandle die folgenden Namen in Binärdarstellung um. Übersetze diese anschließend in dotted quad-notation zurück, bzw. löse sie mit Hilfe des DNS wieder zu Namen auf. Führe das Skript mehrfach aus. Was ist zu beobachten? @hosts = qw(vino vino.techfak.uni-bielefeld.de www.ebay.com www.uni-paderborn.de www.cnn.com www.bielefeld.de ); Überprüfe die Ergebnisse mit dem Programm dig: $ /usr/sbin/dig www.ebay.com Netzwerk-Programmierung Programmieren mit sockets 6/18

weitere Funktionen Protokolle (vgl. /etc/protocols) $proto = getprotobyname( tcp ); $tcp = getprotobynumber(6); Services (vgl. /etc/services) $service = getservbyname( daytime, tcp ); $daytime = getservbyport(13, tcp ); Netzwerk-Programmierung Programmieren mit sockets 7/18

socket-adressen socket: Kombination aus Adresse und Port $sockaddr = sockaddr_in($port, $iaddr); andere Richtung ($port, $iaddr) = sockaddr_in($sockaddr); andere Adressfamilien $fifo = sockaddr_un( /tmp/socket ); Netzwerk-Programmierung Programmieren mit sockets 8/18

Arbeitsweise Client socket() connect() I/O close() Server Netzwerk-Programmierung Programmieren mit sockets 9/18

Client-Code erzeugen eines sockets: socket(socket, PF_INET, SOCK_STREAM, getprotobyname( tcp )) die "can t open socket: $!"; Verbindung herstellen: $sockaddr = sockaddr_in($peer_port, $peer_iaddr)); connect(socket, $sockaddr) die "can t connect: $!"; SOCKET zum lesen/schreiben verwenden socket schließen: close(socket); Netzwerk-Programmierung Programmieren mit sockets 10/18

Aufgaben Schreibe ein Client-Programm, das eine Verbindung aufbaut, alle Daten liest und die Verbindung wieder beendet. Der Zielrechner und der Zielport sollen als Argumente übergeben werden können. Probiere folgende Ports auf dem Rechner arktis aus: 13 (daytime) 19 (chargen) 37 (time) 7 (echo) Überprüfe zunächst die zu erwartende Ausgabe mit telnet: shartmei@afrika telnet arktis 13 Trying 129.70.128.82... Connected to arktis.techfak.uni-bielefeld.de. Escape character is ˆ]. Wed Nov 7 09:28:33 2007 Connection to arktis.techfak.uni-bielefeld.de closed by foreign host. Netzwerk-Programmierung Programmieren mit sockets 11/18

socket-informationen Port wird dynamisch zugewiesen (ephemeral port) beliebiges Interface bei multihomed host Informationen über sockets ermitteln: $mysockaddr = getsockname(socket); $hissockaddr = getpeername(socket); Weiterverarbeitung mit sockaddr in() Netzwerk-Programmierung Programmieren mit sockets 12/18

Aufgaben Erweitere das Programm aus der letzten Aufgabe so, daß alle Daten zur Verbindung angezeigt werden. Zur Erinnerung: socket pair: (IP-Adresse L, Port L, IP-Adresse R, Port R ) Rufe das Programm mehrfach auf. Was ist zu beobachten? Netzwerk-Programmierung Programmieren mit sockets 13/18

Arbeitsweise Server socket() connect() I/O close() I/O close() socket() bind() listen() accept() close() Netzwerk-Programmierung Programmieren mit sockets 14/18

Server-Code, Teil 1 socket(...) wie im Client socket an Port/Adresse binden: $sockaddr = sockaddr_in($local_port, INADDR_ANY); bind(socket, $sockaddr) die "can t bind socket: $!"; passive open und backlog: listen(socket, SOMAXCONN) die "can t listen: $!"; tatsächliche Größe des backlog abhängig vom Betriebssystem Netzwerk-Programmierung Programmieren mit sockets 15/18

Server-Code, Teil 2 Verbindungen entgegennehmen: $client_sockaddr = accept(connect, SOCKET) accept() blockiert, bis Verbindung hergestellt $client_sockaddr enthält Informationen über peer typischerweise in Schleife: while ($client_sockaddr = accept(... )) {... } CONNECT zum lesen/schreiben verwenden am Ende Verbindungs-socket schließen: close(connect); Netzwerk-Programmierung Programmieren mit sockets 16/18

Server-Code, cont. typischer Server-Code: socket(socket,...) bind(socket,...) listen(socket,...) while ( $sockaddr = accept(connect, SOCKET)) { print CONNECT... oder line = <CONNECT> close(connect) } close(socket) # optional Netzwerk-Programmierung Programmieren mit sockets 17/18

Aufgaben Schreibe einen Server, der auf Verbindungen wartet, zwei Zeilen Text sendet und dann die Verbindung schließt. Die erste Zeile soll den Client begrüßen, die zweite soll die aktuelle Uhrzeit ausgeben: hello afrika.techfak.uni-bielefeld.de, nice to meet you it s Mon Jun 2 15:14:17 2003 Du kannst den Server entweder mit dem Client aus der letzten Aufgabe oder mit dem Programm telnet testen. Netzwerk-Programmierung Programmieren mit sockets 18/18