Home   Cover Cover Cover Cover
 

Netzwerkkommunikation

Beispiel "EchoServer und EchoClient"

Dieses Beispiel zeigt wie ein primitiver Server implementiet werden kann, der jede Datenanfrage als Echo an den Rufer zurückschickt. Dabei ist zu beachten, dass eine möglicherweise eingerichtete lokale Firewall die Kommunikation zwischen Client und Server verhindern kann!

../../../samples/4/Netzwerkkommunikation/EchoServer.cs
using System;
using System.Net;
using System.Net.Sockets;

namespace Kapitel4.Netzwerkkommunikation { 

  class EchoServer {
    Socket s;
    
    public bool StartUp(IPAddress ip, int port){
      try {
        s = new Socket
          (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        s.Bind(new IPEndPoint(ip, port));
        s.Listen(10); 
      } catch (Exception e) {
        Console.WriteLine(e.Message);
        return false;
      }
      while (true) {
        Socket newSocket = s.Accept();  // blockiert, bis sich Client verbindet
        Communicate(newSocket);
      }
    }
  
    void Communicate(Socket clSock) {
      try {
        byte[] buffer = new byte[1024];
        while (clSock.Receive(buffer) > 0 ) // Receive blockiert, bis Daten kommen
          clSock.Send(buffer);
        clSock.Shutdown(SocketShutdown.Both);
        clSock.Close ();
      } catch (Exception e) {
        Console.WriteLine(e.Message);
      }
    }

    public static void Main() {
      EchoServer server = new EchoServer( );
      if (!server.StartUp(IPAddress.Loopback, 50000))
        Console.WriteLine("Der Echo-Server konnte nicht gestartet werden");
    }
  }
}
../../../samples/4/Netzwerkkommunikation/EchoClient.cs
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;

namespace Kapitel4.Netzwerkkommunikation { 

  class EchoClient {

    public static void Main() {
      try {
        //----- Verbindung aufnehmen
        Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, 
          ProtocolType.Tcp);
        s.Connect(new IPEndPoint(IPAddress.Loopback, 50000));
        //----- Senden
        byte[] msg = Encoding.ASCII.GetBytes("Das ist ein Test");
        s.Send(msg);
        //----- Empfangen
        byte[] retMsg = new byte[1024];
        s.Receive(retMsg);
        string str = Encoding.ASCII.GetString(retMsg);
        Console.WriteLine(str);
      } catch (Exception e) {
        Console.WriteLine(e.Message);
      }
    }
  }
}





Beispiel "WebRequest"

Das folgende Beispiel zeigt wie die HTML-Seite der URL "dotnet.jku.at" abgefragt wird:

../../../samples/4/Netzwerkkommunikation/WebRequest.cs
using System;
using System.Net;
using System.IO;
using System.Net.Sockets;

namespace Kapitel4.Netzwerkkommunikation { 
  
  class WebTest {
    static void Main() {
      HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://dotnet.jku.at");
      HttpWebResponse response = (HttpWebResponse)req.GetResponse();
      StreamReader r = new StreamReader(response.GetResponseStream());
      string line = r.ReadLine();
      while (line != null) {
        Console.WriteLine(line);
        line = r.ReadLine();
      }
    }
  }
}