Netzwerke, Sockets und Server




C# Workshop, TU Darmstadt 2008,
Präsentation von Qiong Wu (Microsoft Student Partner)
   Kommunikation zwischen Applikationen
   Bereitstellen von Services
   Server Applikationen
   Client Applikationen
...
   Kommunikationsnetze sind das A und O
    heutiger Computerapplikationen
   Ohne Kommunikationsnetze wäre IT
    heutz...
Ethernet          Token Ring

                                                                 IPv6
     RTSP             ...
• Schnittstelle von Anwendung zum
 Logische Aufteilung der      Application      Netzwerk

  Netzwerkkommunikation       ...
 Auf Internetprotokolle                 • Austausch
                           Application     anwendungsspezifischer Dat...
 De Facto Standards für                 • DNS, DHCP, HTTP,
                           Application
  Internetkommunikatio ...
 Network Layer                                • DNS, DHCP, HTTP,
                                 Application
 Wichtigst...
 Transport Layer                         • DNS, DHCP, HTTP,
                            Application
 Nutzt IP als       ...
 Transport Layer                        • DNS, DHCP, HTTP, FT
                           Application
 Nutzt IP als      ...
   Identifizieren eine IP Maschine
   Adressen können je nach IP Version in zwei
    Versionen auftreten
     IPv4 Adre...
 Bereitstellung           Well-                Dynamic /
                                   Registered
  mehrerer Service...
   Schnittstelle zur Netzwerkkommunikation
   Berkeley Sockets / Microsoft Winsock
   Verschiedene Sockettypen
     Ra...
Computer 1                                             Computer 1


     Anwendung                                        ...
   Raw Sockets
     Zugriff auf Protokolle der Netzwerkschicht (Layer 3)
     Beispiel: IP
   Datagram Sockets
     V...
   Socket selber arbeitet zwar auf dem
    jeweiligen Layer, Applikation kann aber nur
    auf Daten des um eins höheren ...
   System.Net
     Bietet Schnittstellen für einfache
      Netzwerkkommunikation auf Applikationsebene
     DNS
     ...
   IP Adresse repräsentiert durch IPAddress
    Objekt
     Konvertieren von Strings in IPAddress mit
     IPAddress.Par...
String to IP Conversion
                                                               Adressen ermitteln


IPAddress Exam...
   Konstruktor erfordert 3 Parameter
     AddressFamily – spezifiert das
      Adressierungsschema, z.B. IPv4 oder IPv6
...
   Vorteil
     Hohe Anpassung möglich
     Raw Sockets möglich
   Nachteil
     Keine einfache Handhabung
   Normal...
   Client
     Fordert einen Service an
     Muss die Adresse des
      Servers kennen (z.B. IP
      Adresse + Port)
 ...
 Client und Server nicht
  getrennt
 Peers können Dienste
  sowohl anfordern als
  auch bereitstellen
   Ziel: Kommunikation zwischen Client und
    Server Applikation
   Implementierung mit TCP
   Server lauscht über Soc...
   Möglichst einfacher Server
     Nur ein Client gleichzeitig verbunden
   Ein Socket für Clientannahme bindet einen
 ...
Socketparameter
   Socket Objekt erstellen                                        übermitteln

Socket listener = new Socke...
   Verbinden mit Socket.Connect()
     IP Adresse und Port übergeben
     IP Parsen mit IPAdress.Parse()
     (optiona...
IP Adresse definieren                    IP Endpunkt aus IP Adresse + Port
                                               ...
   Praktische Werkzeuge für Diagnose &
    Netzwerkdebugging
   Leider unter Vista stark eingeschränkt
   In Produktion...
 Vereinfachen den
                        TCPClient   TCPListener   UDPClient
  Umgang mit Sockets
 Liefern einfache
   ...
   Stellt Routinen für das Herstellen von TCP
    Verbindungen bereit
   Verbindungsaufbau mit TCPClient.Connect()
   N...
TcpClient tcpClient = null;     TCPClient Objekt deklarieren
         try
         {                                      ...
   Lauscht auf eingehende TCP Verbindungen
   Gegenstück zum TCPClient
   Kann TCPClient Accepten, aber auch Socket
  ...
TcpListener tcpListener = null;              TCPListener + ClientObjekt
      TcpClient tcpClient = null;                 ...
   Keine Verbindung vor Senden von Daten
    erforderlich
   Kein Listener erforderlich
   Einfacher Zugriff auf UDP Pa...
UDPClient Objekt deklarieren

         UdpClient udpClient = new UdpClient(LocalPort);
         try                       ...
   Stellt Routinen für den Abruf von URIs
    (Uniform Resource Identifier) bereit
   Unterstützung von http:, https:, f...
WebClient Objekt deklarieren

WebClient client = new WebClient();                WebClient Optionen ändern
client.Headers....
   Ping Klasse im
    System.Net.NetworkInformation
    NameSpace
   PingOptions erlaubt setzen von Ping
    Optionen wi...
Ping Objekt deklarieren
Ping myPing = new Ping();                              Byte Buffer
byte[] buffer = new byte[buffer...
   System.Net.Mail NameSpace enthält Klassen
   SmtpClient
     Versendet
      ▪ MailMessage mit
        ▪   MailAddre...
Email Adressen definieren

MailAddress from = new MailAddress(quot;qiong.wu@studentpartners.dequot;, quot;Qiong Wuquot;);
...
   Netzwerkoperationen können oft lange dauern
   Oft blockieren Netzwerkoperationen ein
    Programm für relativ lange ...
   Server erstellt für jeden Client der mit
    Socket.Accept() angenommen wird einen
    eigenen Thread
   Verhindert B...
   Im letzten Kapitel lernten wir etwas über
    Threads…
Main Thread                                 Client Handler Thread

   Listener Socket                           Kommunikat...
Socket listener = null;
try
{
    listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
...
static void AcceptClient(object ClientSocket)
{
    Socket Client = null;
    try
    {
        Client = (Socket)ClientSoc...
   Oft ist es wichtig Protokolle zu
    implementieren, z.B. HTTP, Instant
    Messenger, etc.
   Funktionsweise ist bei...
   Dokumente zum Internet
   Beinhalten technische Spezifikationen zu
    Bestandteilen des Internets
   Genaue Funktio...
 Netzwerksniffer
  Wireshark, früher
  Ethereal
 Analysiert
  Netzwerkverkehr
 Schlüsselt die meisten
  Protokolle auf
...
 Normalerweise sind Kommunikationsstandards
  bekannt
 Oft ist für die Nachprogrammierung eines
  Clients/Servers allerd...
   Bisher: Programm muss sich um die
    Kommunikation selber kümmern und
    übertragene Payloads auswerten
   Mit WCF:...
C# Workshop - Networking
C# Workshop - Networking
C# Workshop - Networking
C# Workshop - Networking
Nächste SlideShare
Wird geladen in …5
×

C# Workshop - Networking

2.552 Aufrufe

Veröffentlicht am

That's the slides for our C# Workshop at Darmstadt University of Technology, powered by Microsoft Student Partners.

Veröffentlicht in: Technologie
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
2.552
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
205
Aktionen
Geteilt
0
Downloads
56
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

C# Workshop - Networking

  1. 1. Netzwerke, Sockets und Server C# Workshop, TU Darmstadt 2008, Präsentation von Qiong Wu (Microsoft Student Partner)
  2. 2.  Kommunikation zwischen Applikationen  Bereitstellen von Services  Server Applikationen  Client Applikationen  Anbindung an das Internet
  3. 3.  Kommunikationsnetze sind das A und O heutiger Computerapplikationen  Ohne Kommunikationsnetze wäre IT heutzutage nicht IT
  4. 4. Ethernet Token Ring IPv6 RTSP UDP TCP PPP IPv4 RSVP FTP RIP Telnet IPX SCTP HTTP SMTP DNS IGMP SIP RTP POP NTP ICMP SSH
  5. 5. • Schnittstelle von Anwendung zum  Logische Aufteilung der Application Netzwerk Netzwerkkommunikation • Darstellung von Daten, Presentation Komprimierung & Verschlüsselung in Layer  7 Layer durch OSI Standard Session • Prozesskommunikation definiert Transport • Ende-zu-Ende Verbindung  Relevant für .net Programmierung Network • Paketvermittlung, Wegeermittlung (Routing) hauptsächlich Layer 3-7 • MAC & LLC, Physikalische Data Link  OSI Protokolle kaum Adressierung verwendet Physical • Medium, Signal & Bitübertragung
  6. 6.  Auf Internetprotokolle • Austausch Application anwendungsspezifischer Daten zugeschnitten  TCP/IP Protokolle heute enorm wichtig Transport • Ende-zu-Ende Verbindung • Paketvermittlung, Internet Wegeermittlung (Routing) & Adressierung (IP) • Physikalische Adressierung, Link Bitübertragung, Medium & Signal
  7. 7.  De Facto Standards für • DNS, DHCP, HTTP, Application Internetkommunikatio FTP, IMAP, SMTP n  Nutzung durch Sockets Transport • TCP, UDP, SCTP Internet • IP (IPv4, IPv6) • Ethernet, Token Bus, Link Token Ring, FDDI
  8. 8.  Network Layer • DNS, DHCP, HTTP, Application  Wichtigstes Protokoll FTP, IMAP, SMTP für heutige Datenkommunikation Transport • TCP, UDP, SCTP  2 Standards  IPv4 ▪ Derzeit nahezu überall ausgebaut Internet • IP (IPv4, IPv6)  IPv6 ▪ Noch nicht großflächig produziert • Ethernet, Token Bus, Link ▪ Größerer Adressraum Token Ring, FDDI
  9. 9.  Transport Layer • DNS, DHCP, HTTP, Application  Nutzt IP als FTP, IMAP, SMTP Netzwerkprotokoll  zuverlässiges, Verbindu Transport • TCP, UDP, SCTP ngs- und Stream- orientiertes Punkt-zu- Punkt-Protokoll Internet • IP (IPv4, IPv6)  Daten erreichen das Ziel sicher • Ethernet, Token Bus, Link Token Ring, FDDI
  10. 10.  Transport Layer • DNS, DHCP, HTTP, FT Application  Nutzt IP als P, IMAP, SMTP Netzwerkprotokoll  unzuverlässiges Punkt- Transport • TCP, UDP, SCTP zu-Punkt-Protokoll  Schneller als TCP, weniger Overhead Internet • IP (IPv4, IPv6) • Ethernet, Token Bus, Link Token Ring, FDDI
  11. 11.  Identifizieren eine IP Maschine  Adressen können je nach IP Version in zwei Versionen auftreten  IPv4 Adressen 0.0.0.0-255.255.255.255  IPv6 Adressen 3FFE:FFFF:7654:FEDA  Namensverwaltung erforderlich um umständliche Adressen „nachzuschlagen“ -> Domain Name System  Beispiel: www.microsoft.com-> 207.46.192.254
  12. 12.  Bereitstellung Well- Dynamic / Registered mehrerer Services auf Known Private Ports Ports Ports einem Hosts  Adressierung von Protokollen der Anwendungsschicht 1024- 49152-  Getrennte TCP und 0-1023 49151 65535 UDP Ports
  13. 13.  Schnittstelle zur Netzwerkkommunikation  Berkeley Sockets / Microsoft Winsock  Verschiedene Sockettypen  Raw Sockets  Datagram Sockets  Stream Sockets
  14. 14. Computer 1 Computer 1 Anwendung Anwendung Application Layer (TCP/IP Layer 4) Application Layer (TCP/IP Layer 4) HTTPWebRe HTTPWebRe quest, Application Layer (OSI Layer 7) Application Layer (OSI Layer 7) quest, FTPWebReq Presentation Layer (OSI Layer 6) Presentation Layer (OSI Layer 6) FTPWebReq uest, etc. uest, etc. Session Layer (OSI Layer 5) Session Layer (OSI Layer 5) UDP Socket Transport Layer (TCP/IP Layer 3) Transport Layer (TCP/IP Layer 3) UDP Socket TCP Socket Transport Layer (OSI Layer 4) Transport Layer (OSI Layer 4) TCP Socket Raw Socket Internet Layer (TCP/IP Layer 2) Internet Layer (TCP/IP Layer 2) Raw Socket Network Layer (OSI Layer 3) Network Layer (OSI Layer 3) NDIS Network Access Layer (TCP/IP Network Access Layer (TCP/IP NDIS Layer 1) Layer 1) Data Link Layer (OSI Layer 2) Data Link Layer (OSI Layer 2) Physical Layer (OSI Layer 1) Physical Layer (OSI Layer 1) LAN / MAN / WAN
  15. 15.  Raw Sockets  Zugriff auf Protokolle der Netzwerkschicht (Layer 3)  Beispiel: IP  Datagram Sockets  Verschicken Daten paketweise  Beispiel: UDP  Stream Sockets  Zugriff auf Datenstrom  Beispiel: TCP
  16. 16.  Socket selber arbeitet zwar auf dem jeweiligen Layer, Applikation kann aber nur auf Daten des um eins höheren Layers zugreifen  Um Informationen des Socketlayers zu erhalten ist der Zugriff auf die Socketeigenschaften notwendig
  17. 17.  System.Net  Bietet Schnittstellen für einfache Netzwerkkommunikation auf Applikationsebene  DNS  WebClient  IPAddress, IPEndpoint  System.Net.Sockets  Bietet Schnittstellen für einfachen Zugriff auf Windows Sockets  Socket Object  TCPClient, TCPListener, UDPClient
  18. 18.  IP Adresse repräsentiert durch IPAddress Objekt  Konvertieren von Strings in IPAddress mit IPAddress.Parse()  IPEndPoint beinhaltet IPAddress und Portnummer um eindeutigen Endpunkt zu identifizieren  Dns.GetHostEntry() um Hostnamen zugeordnete IP Adresse zu finden
  19. 19. String to IP Conversion Adressen ermitteln IPAddress ExampleAddress = IPAddress.Parse(quot;192.168.1.1quot;); foreach (IPAddress HostIPAddress in Dns.GetHostEntry(quot;www.microsoft.comquot;).AddressList) { Console.WriteLine(HostIPAddress.ToString()); }
  20. 20.  Konstruktor erfordert 3 Parameter  AddressFamily – spezifiert das Adressierungsschema, z.B. IPv4 oder IPv6  SocketType – Typ des Sockets, z.B. Datagram, Stream, oder Raw  ProtocolType – Protokolltyp, TCP, UDP, IP
  21. 21.  Vorteil  Hohe Anpassung möglich  Raw Sockets möglich  Nachteil  Keine einfache Handhabung  Normalerweise ist direktes Arbeiten mit Sockets nicht erforderlich
  22. 22.  Client  Fordert einen Service an  Muss die Adresse des Servers kennen (z.B. IP Adresse + Port)  Fordert mit Request an  Server  Stellt einen Service bereit  Antwortet mit Response
  23. 23.  Client und Server nicht getrennt  Peers können Dienste sowohl anfordern als auch bereitstellen
  24. 24.  Ziel: Kommunikation zwischen Client und Server Applikation  Implementierung mit TCP  Server lauscht über Sockets auf einem dedizierten Port  Client sendet Nachricht an den Server  Server antwortet mit Hallo  Wichtig! Termination Message
  25. 25.  Möglichst einfacher Server  Nur ein Client gleichzeitig verbunden  Ein Socket für Clientannahme bindet einen Port mit Socket.Bind() und lauscht dann auf Port & Adresse mit Socket.Listen()  Erstellt Socket für Clientkommunikation mit Socket.Accept()  Socket für Clientkommunikation empfängt Daten mit Socket.Receive()
  26. 26. Socketparameter Socket Objekt erstellen übermitteln Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); listener.Bind(new IPEndPoint(IPAddress.Any, PORT)); listener.Listen(0); Auf Port lauschen Port an Socket binden Console.WriteLine(quot;Waiting for incoming V4 connections on quot; + PORT); Socket socket = listener.Accept(); Neuer Socket aus angenommener listener.Close(); Verbindungsanfrage byte[] b = new byte[100]; Empfangspuffer int len; while ((len = socket.Receive(b)) != 0) Bytes empfangen { System.Console.WriteLine(quot;RXv4: Received Packet with length: quot; + len); Console.WriteLine(quot;Package Content Begin--->quot;); Console.WriteLine(Encoding.ASCII.GetString(b).Trim()); Console.WriteLine(quot;<---Package Content Endquot;); b = new byte[100]; } Bytes senden socket.Send(b); socket.Close(); Verbindung beenden
  27. 27.  Verbinden mit Socket.Connect()  IP Adresse und Port übergeben  IP Parsen mit IPAdress.Parse()  (optional) Dns Auflösung mit DNS.GetHostEntry()  Daten kodieren mit Encoding.GetBytes()  Konvertierung von Plain Text in Bytes erforderlich  Daten senden mit Socket.Send()  Erwartet zu sendendes Bytearray  (optional) SocketFlags  Gibt Anzahl gesendeter Bytes zurück
  28. 28. IP Adresse definieren IP Endpunkt aus IP Adresse + Port definieren IPAddress ipav4 = IPAddress.Parse(IPv4_ADDR); IPEndPoint ipehv4 = new IPEndPoint(ipav4, PORT); Socket connectionv4 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try Verbindung zu Endpunkt { connectionv4.Connect(ipehv4); herstellen byte[] b = Encoding.ASCII.GetBytes(String.Format(quot;This is a message.quot;)); Console.WriteLine(quot;TXv4: Sending Packet with length: quot; + b.Length.ToString()); Console.WriteLine(quot;Package Content Begin--->quot;); Console.WriteLine(Encoding.ASCII.GetString(b).Trim()); Verbindung zu Endpunkt Console.WriteLine(quot;<---Package Content Endquot;); connectionv4.Send(b, SocketFlags.None); herstellen b = new byte[1]; connectionv4.Send(b, SocketFlags.None); } catch { Terminierungsnachricht } Verbindung beenden senden finally { connectionv4.Close(); }
  29. 29.  Praktische Werkzeuge für Diagnose & Netzwerkdebugging  Leider unter Vista stark eingeschränkt  In Produktionsumgebungen kaum einsetzbar  Möglich Unabhängig von TCP/UDP direkt IP Pakete zu manipulieren  Ggf. Notwendig um Protokolle wie ICMP, IGMP, etc. zu implementieren
  30. 30.  Vereinfachen den TCPClient TCPListener UDPClient Umgang mit Sockets  Liefern einfache Socket Schnittstelle zur Kommunikation mit WinSock API TCP & UDP  Verwenden automatisch Sockets
  31. 31.  Stellt Routinen für das Herstellen von TCP Verbindungen bereit  Verbindungsaufbau mit TCPClient.Connect()  NetworkStream Objekt mit TCPClient.GetStream()  Senden von Paketen mit NetworkStream.Write()  Empfang von Paketen mit NetworkStream.Read()
  32. 32. TcpClient tcpClient = null; TCPClient Objekt deklarieren try { Ziel-Endpunkt übergeben tcpClient = new TcpClient(Host, RemotePort); NetworkStream netStream = tcpClient.GetStream(); Byte[] sendBytes = new Byte[1500]; sendBytes[0] = 0x31; Netzwerk Stream erstellen netStream.Write(sendBytes, 0, sendBytes.Length); Bytes senden Byte[] receiveBytes = new Byte[1500]; netStream.Read(receiveBytes, 0, receiveBytes.Length); Console.WriteLine(Encoding.ASCII.GetString(receiveBytes)); } catch Bytes { empfangen } finally { tcpClient.Close(); }
  33. 33.  Lauscht auf eingehende TCP Verbindungen  Gegenstück zum TCPClient  Kann TCPClient Accepten, aber auch Socket  Funktionsweise wie Server Socket
  34. 34. TcpListener tcpListener = null; TCPListener + ClientObjekt TcpClient tcpClient = null; deklarieren try { tcpListener = new TcpListener(IPAddress.Any, 80); tcpListener.Start(0); Zu lauschende tcpClient = tcpListener.AcceptTcpClient(); Adresse + Port Client NetworkStream netStream = tcpClient.GetStream(); annehmen Netzwerk Stream erstellen Byte[] sendBytes = new Byte[1500]; sendBytes[0] = 0x31; netStream.Write(sendBytes, 0, sendBytes.Length); IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0); Byte[] receiveBytes = new Byte[1500]; netStream.Read(receiveBytes, 0, receiveBytes.Length); Console.WriteLine(Encoding.ASCII.GetString(receiveBytes)); } finally { tcpClient.Close(); tcpListener.Stop(); }
  35. 35.  Keine Verbindung vor Senden von Daten erforderlich  Kein Listener erforderlich  Einfacher Zugriff auf UDP Paketroutinen  Senden von Daten mit UDPClient.Send()  Empfang von Daten mit UDPClient.Receive()
  36. 36. UDPClient Objekt deklarieren UdpClient udpClient = new UdpClient(LocalPort); try (optional) Host und Port { festlegen udpClient.Connect(Host, RemotePort); Byte[] sendBytes = new Byte[13]; sendBytes[0] = 0x31; udpClient.Send(sendBytes, sendBytes.Length); Bytes IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0); Byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint); senden Console.WriteLine(Encoding.ASCII.GetString(receiveBytes)); } catch { } finally Bytes { empfangen udpClient.Close(); }
  37. 37.  Stellt Routinen für den Abruf von URIs (Uniform Resource Identifier) bereit  Unterstützung von http:, https:, ftp:, file:  Verwendet  HttpWebRequest  HttpWebResponse  FtpWebRequest  FtpWebResponse
  38. 38. WebClient Objekt deklarieren WebClient client = new WebClient(); WebClient Optionen ändern client.Headers.Add(quot;user-agentquot;, quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)quot;); client.DownloadFile(quot;http://localhost/IE_T.pngquot;, quot;IE.pngquot;); Datei laden Stream data = client.OpenRead(quot;http://localhost/index.htmlquot;); StreamReader reader = new StreamReader(data); string s = reader.ReadToEnd(); Console.WriteLine(s); data.Close(); reader.Close(); Stream extrahieren
  39. 39.  Ping Klasse im System.Net.NetworkInformation NameSpace  PingOptions erlaubt setzen von Ping Optionen wie DontFragment, TTL, etc.  Ping.Send() gibt PingReplay Objekt zurück das ausgewertet werden kann
  40. 40. Ping Objekt deklarieren Ping myPing = new Ping(); Byte Buffer byte[] buffer = new byte[buffersize]; int timeout = 1000; PingOptions pingOptions = new PingOptions(); Ping Optionen PingReply reply = myPing.Send(host, timeout, buffer, pingOptions); Ping Senden if (reply.Status == IPStatus.Success) { return (quot;Antwort in quot; + reply.RoundtripTime.ToString() + quot;ms erhalten Bytes=quot; + reply.Buffer.Length.ToString()); } else if (reply.Status == IPStatus.TimedOut) { return (quot;Timeoutquot;); Status Checken } else { return reply.Status.ToString(); }
  41. 41.  System.Net.Mail NameSpace enthält Klassen  SmtpClient  Versendet ▪ MailMessage mit ▪ MailAddress ▪ Subject ▪ Body ▪ MailAttachment  Benötigt ggf. ▪ NetworkCredentials
  42. 42. Email Adressen definieren MailAddress from = new MailAddress(quot;qiong.wu@studentpartners.dequot;, quot;Qiong Wuquot;); MailAddress to = new MailAddress(quot;roman.brehm@studentpartners.dequot;, quot;Roman Brehmquot;); MailMessage message = new MailMessage(from, to); Nachricht erstellen message.Subject = quot;FYI: Hot Topicquot;; message.Body = quot;Hi Roman, this is Qiongquot;; message.Attachments.Add(new Attachment(quot;test.htmlquot;)); SmtpClient emailClient = new SmtpClient(quot;smtp.example.comquot;, 587); System.Net.NetworkCredential SMTPUserInfo = new System.Net.NetworkCredential(quot;Userquot;, quot;Passwordquot;); SMTP Server festlegen emailClient.Credentials = SMTPUserInfo; emailClient.Send(message); Console.WriteLine(quot;Message Sentquot;); Zugangsdaten zuweisen Email senden
  43. 43.  Netzwerkoperationen können oft lange dauern  Oft blockieren Netzwerkoperationen ein Programm für relativ lange Zeit  Lösungen:  Asynchrone Methoden wie ▪ BeginRead ▪ EndRead ▪ BeginConnect ▪ EndConnect  Multithreaded Server / Clients
  44. 44.  Server erstellt für jeden Client der mit Socket.Accept() angenommen wird einen eigenen Thread  Verhindert Blockieren  Erlaubt parallele Abfertigung von Clients -> bessere Skalierbarkeit, mehr Performance, weniger Lag
  45. 45.  Im letzten Kapitel lernten wir etwas über Threads…
  46. 46. Main Thread Client Handler Thread Listener Socket Kommunikation mit Erstellen Client Auf Listener Socket lauschen ClientSocket schließen Bei Clientannahme ClientSocket erstellen Thread erstellen
  47. 47. Socket listener = null; try { listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); listener.Bind(new IPEndPoint(IPAddress.Any, PORT)); listener.Listen(10); Console.WriteLine(quot;[ServerThread]: Waiting for incoming V4 connections on quot; + PORT); while (true) { Socket socket = listener.Accept(); Console.WriteLine(quot;[ServerThread]: Client connectedquot;); ThreadPool.QueueUserWorkItem(new WaitCallback(AcceptClient), socket); } } catch { } finally { listener.Close(); }
  48. 48. static void AcceptClient(object ClientSocket) { Socket Client = null; try { Client = (Socket)ClientSocket; byte[] b = new byte[100]; int len; while ((len = Client.Receive(b)) != 0) { System.Console.WriteLine(quot;[ClientThread]: Received Packet with length: quot; + len); Console.WriteLine(quot;[ClientThread]: Package Content Begin--->quot;); Console.WriteLine(quot;[ClientThread]: quot; + Encoding.ASCII.GetString(b).Trim()); Console.WriteLine(quot;[ClientThread]: <---Package Content Endquot;); b = new byte[100]; } Client.Send(b); } catch { } finally { Client.Close(); } }
  49. 49.  Oft ist es wichtig Protokolle zu implementieren, z.B. HTTP, Instant Messenger, etc.  Funktionsweise ist bei Standards oft in Dokumenten hinterlegt z.B. RFCs (Request for Comments)  Für proprietäre und nicht dokumentierte Protokolle wird oft Reverse Engineering verwendet
  50. 50.  Dokumente zum Internet  Beinhalten technische Spezifikationen zu Bestandteilen des Internets  Genaue Funktionsweise von Protokollen wie IP, UDP, TCP, etc. in RFCs Dokumentiert  Durchnummeriert, z.B.:  RFC 1945 HTTP1.0  RFC 768 UDP  RFC 791 IP  Zu finden unter http://www.rfc-editor.org/
  51. 51.  Netzwerksniffer Wireshark, früher Ethereal  Analysiert Netzwerkverkehr  Schlüsselt die meisten Protokolle auf  Sehr nützlich für Reverse Engineering / Debugging
  52. 52.  Normalerweise sind Kommunikationsstandards bekannt  Oft ist für die Nachprogrammierung eines Clients/Servers allerdings Kenntnis über das Netzwerkprotokoll notwendig  Wenn dieses nicht dokumentiert ist kann man Reverse Engineering betreiben  Bedeutet  Kommunikation zwischen Originalserver & Client mitschneiden  Mitschnitt analysieren  Client/Server programmieren sodass Anfragen/Antworten dem originalen Server entsprechen
  53. 53.  Bisher: Programm muss sich um die Kommunikation selber kümmern und übertragene Payloads auswerten  Mit WCF: Serviceorientierte Architektur  Zugriff auf Methoden von Remoteclient aus möglich

×