Programmierung verteilter Anwendungen unter .NET SS 2010Prof. Dr. Herrad Schmidt1 Einführung 2 Message Passing
Programmierung verteilter Anwendungen unter .NET SS 2010Prof. Dr. Herrad Schmidt
1 Einführung 2 Message Passing
Einführung Ausgehend von einer Einzelplatz-Applikation (Benutzerverwaltung) werden einige Programmierkonzepte in .NET zur Gestaltung von Client-Server-Lösungen vorgestellt und diese für die gegebene Applikation implementiert. Folgende Verfahren und Techniken für die Kommunikation und Koordination werden behandelt: Message Passing (Sockets) ASP.NET Windows Communication Foundation (WCF) Remote Procedure Call wird nicht behandelt. Programmiersprache: C#
Literaturhinweise: Johnson, B. /Madziak, P./Morgan, S.: Microsoft .NET Framework 3.5 – Windows Communication Foundation. Microsoft Press, Redmond, 2009 Löwy, J.: Programming .NET Components. 2nd ed. O‘Reilly, Beijing [u.a.] 2005 Schwichtenberg, H.: Microsoft ASP.NET mit Visual C# 2008 – Das Entwicklerbuch. Microsoft Press, Unterschleißheim 2009 Tanenbaum, A./van Steen, M.: Verteilte Systeme. 2., aktualisierte Aufl., Pearson Studium, München [u.a.] 2008 Links: Microsoft MSDN MSDN-Solve und CodeClips Überblick über .NET Framework Microsoft Visual Studio Developer Center
2 Message Passing mittels Sockets Informationen zwischen Client und Server werden als „ungetypte“ Nachrichten ausgetauscht. Sockets sind eine Sammlung von Funktionen, Datenstrukturen und Konventionen für die Netzwerkprogrammierung (Socket-Dienste). Über das API, hier speziell Winsock32-API, wird auf diese zugegriffen. Sie basieren auf dem Transmission Control Protocol (TCP) oder dem User Datagram Protocol (UDP). Sockets ermöglichen somit die Kommunikation zwischen Prozessen (Interprozeßkommunikation, kurz IPC), die auf einem System oder zwei getrennten Systemen ablaufen können. Sie stellen die Verbindung zwischen Prozessen her. Die IPC kann synchron oder asynchron erfolgen.
Durch den Socket-Aufruf wird über die Windows Sockets-Schnittstelle ein Socket-Dienst initialisiert. Dabei wird die Adressfamilie (z.B. für IP), der Sockettyp (z.B. Stream) und der Protokolltyp (z.B. TCP) angegeben. Der aufzubauende TCP/IP-Dienst wird durch die IP-Adresse des Servers und eine Portnummer eindeutig als Kommunikationsend-punkt definiert. Durch den bind-Aufruf wird der Kommunikationsendpunkt an den Socket gebunden. Der Serverprozeß hört bei einem Socket mit dem listen-Aufruf das Netz ab. Ein Client-Prozeß erzeugt einen eigenen Socket und verbindet sich über diesen mit dem Server-Socket. Die Daten werden in einen Strom geschrieben und vom Empfänger als Paket entgegengenommen.
Server You have four tasks to perform before a server can transfer data with a client connection: Create a socket. Bind the socket to a local IPEndPoint. Place the socket in listen mode. Accept an incoming connection on the socket. Client Now that you have a working TCP server, you can create a simple TCP client program to interact with it. There are only two steps required to connect a client program to a TCP server: Create a socket. Connect the socket to the remote server address. Quelle: http://www.codeproject.com/KB/IP/TCPIPChat.aspx?fid=262673&df=90&mpp=25&noise=3&sort=Position&view=Quick&fr=76
Das .NET Framework stellt Klassen zur Nutzung der Socket-Dienste zur Verfügung, siehe MSDN: Sockets:http://msdn.microsoft.com/en-us/library/b6xa24z5.aspx Erstellen von Sockets:http://msdn.microsoft.com/en-us/library/1w48w47c.aspx Serversockets:http://msdn.microsoft.com/en-us/library/dz10xcwh.aspx Synchrone Serversockets:http://msdn.microsoft.com/en-us/library/80z2essb.aspx Clientsockets:http://msdn.microsoft.com/en-us/library/6aes97be.aspx Synchrone Clientsockets:http://msdn.microsoft.com/en-us/library/6xt5x5zw.aspx Asynchrone Serversockets:http://msdn.microsoft.com/en-us/library/5w7b7x5f.aspx Asynchrone Clientsockets: http://msdn.microsoft.com/en-us/library/bbx2eya8.aspx
3 Threads Ein Thread ist die Basiseinheit für die Zuordnung von CPU-Zeit. Innerhalb eines Prozesses können mehrere Threads „parallel“ ausgeführt werden. Multithreading in .NET:http://msdn.microsoft.com/de-de/library/bb979148.aspx Allgemeine Einführung:http://msdn.microsoft.com/de-de/library/bb979280.aspx Multithreading in der Praxis:http://msdn.microsoft.com/de-de/library/bb978929.aspx Tutorial:http://msdn.microsoft.com/en-us/library/aa645740(VS.71).aspx
Solution 1_Sockets (1) A_SocketServereinfachster Socket-Serverkann über telnet getestet werden: telnet Host Port B_SocketClientkommuniziert mit A_SocketServer C_SocketServerEncodingWPF-Anwendung, Codierung mit Encoding, Steuerung des Server-Shutdown über den Client D_SocketClientEncodingkommuniziert mit C_SocketServerEncoding (57068) oder F_SocketServerThreads (57069)
Solution 1_Sockets (2) E_ThreadBeispielprogramm für Multithreading in .NET G_AsynchSocketServerAnnahme eingehender Verbindung und Datenempfang erfolgen asynchron. H_AsynchSocketClientDatenempfang erfolgt asynchron
Übungen Erweitern Sie das Programm C_SocketServerEncoding:Die Anzahl der Benutzer ist der Datenbank „datenbasis“ zu entnehmen. Schreiben Sie eine C/S-Anwendung, bei der die Clients nach dem Verbindungsaufbau dem Server ihren Hostnamen (oder einen anderen Namen) senden. Der Server zeigt in einer ListBox alle Clients an. Der Benutzer am Server kann dann einen Client auswählen, dem er gezielt eine Botschaft sendet.
Comments