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