Programmieren mit sockets

Ähnliche Dokumente
Programmieren mit sockets

Programmierung mit sockets

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

Netzwerk-Programmierung. Netzwerke. Alexander Sczyrba Michael Beckstette.

Netzwerk-Programmierung. Netzwerke.

Netzwerke. Netzwerk-Programmierung. Sven Hartmeier.

Protokolle und Schichten. Grundlagen der Rechnernetze Einführung 41

Konsequenz für Forwarding Tabellen

Rechnernetze. 6. Übung

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN

Verteilte Systeme - Java Networking (Sockets) -

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

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

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

Client-Server TCP/IP - Kodierung

Prozesse. Netzwerk - Programmierung. Alexander Sczyrba Madis Rumming

Netzwerk Linux-Kurs der Unix-AG

Übung - Mit Wireshark eine UDP-DNS-Aufzeichnung untersuchen

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

Java und Netzwerkkommunikation

Client/Server-Systeme

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

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

Kommunikation von Prozessen: Signale und Pipes

7. OSI-Modell als Rollenspiel

Transmission Control Protocol (TCP)

Client/Server-Systeme

Logging, Threaded Server

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

Netzwerkprogrammierung unter Linux und UNIX

Threads. Netzwerk - Programmierung. Alexander Sczyrba Jan Krüger

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

Lösung Übungszettel 6

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

Berkeley Sockets 187

Netzwerk-Programmierung in C

Byteorder bei Netzwerkkommunikation Netzwerkprogrammierung - Sockets Netzwerkprogrammierung - Verschiedenes

Client-Server TCP/IP - Kodierung

1 Kommunikation im World-Wide-Web

Socket-Programmierung unter Java

4. Thread- und Netzwerk- Programmierung

Socket-Programmierung unter Java

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

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

Komplexe Datenstrukturen

Verteilte Systeme - 1. Übung

Installieren und Verwenden des Document Distributor 1

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

knxpresso IP-Interface

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

Referat: Netzwerkprogrammierung in Java

Packet Tracer - Untersuchen des TCP/IP- und des OSI-Modells in Aktion

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

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

Rechnernetze II SS Betriebssysteme / verteilte Systeme rolanda.dwismuellera@duni-siegena.de Tel.: 0271/ , Büro: H-B 8404

8. TCP-IP Modell als Rollenspiel

Tafelübung zu BS 4. Interprozesskommunikation

Networking mit Sockets in Java

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

PSGEthernet (ASCII) Protokoll

Python zur Lösung von AvA Übung 1 VON MORITZ FEY

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

Transkript:

Netzwerk - Programmierung Programmieren mit sockets Alexander Sczyrba asczyrba@cebitec.uni-bielefeld.de Madis Rumming mrumming@cebitec.uni-bielefeld.de

Übersicht Datentypen und Konversionsfunktionen minimaler Client minimaler Server

Berkeley sockets 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

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 173.194.69.147 bk-in-f147.1e100.net Keine mathematische Funktion www.google.com (173.194.69.106, 173.194.69.147... )

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);

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( goldfinger goldfinger.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: $ dig www.ebay.com

Weitere Funktionen Protokolle (vgl. /etc/protocols) $proto = getprotobyname( tcp ); $tcp = getprotobynumber(6); Services (vgl. /etc/services) $service = getservbyname( daytime, tcp ); $daytime = getservbyport(13, tcp );

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 );

Arbeitsweise Client socket() connect() I/O close() Server

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);

Aufgaben Mach Dich mit dem ServiceServer (Material zu dieser Übung) vertraut und teste beide Services mit telnet Welche Services bietet der Server? Schreibe ein Client-Programm, das eine Verbindung aufbaut, ein Kommando absetzt (optional), alle Daten liest und die Verbindung wieder beendet. Der Zielrechner, der Zielport und das abzusetzende Kommando sollen als Argumente übergeben werden können. Probiere den Client mit dem ServiceServer aus. Teste den Client auch mit dem WebServer der Technischen Fakultät. Welcher Port, welches Protokoll und was für ein Kommando muss benutzt werden, um sich die Einstiegsseite anzeigen zu lassen?

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()

Aufgaben Erweitere das Programm aus der letzten Aufgabe so, daß alle Daten zur Verbindung angezeigt werden. Zur Erinnerung: socket pair: (IP-AdresseL, PortL, IP-AdresseR, PortR) Rufe das Programm mehrfach auf. Was ist zu beobachten?

Arbeitsweise Server socket() conect() IO close() IO close() socket() bind() listen() accept() close()

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

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);

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

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 goldfinger.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.

Aufgaben Starte mehrere Clients gleichzeitig: client.pl 54321 & [enter] client.pl 54321 & [enter] client.pl 54321 & [enter] Was ist zu beobachten? Starte zwei Clients mit der gleichen Portnummer gleichzeitig: client.pl 54321 55443 & [enter] client.pl 54321 55443 & [enter] Was passiert? Beende den Server und versuche ihn sofort mit der gleichen Portnummer neu zu starten. Was passiert? Was passiert, wenn Du den Client mit CTRL-C abbrichst, während er Daten vom Server liest?