C# Webserver Simulation über C# möglich?

PeterParty

Lt. Junior Grade
Registriert
Aug. 2008
Beiträge
282
Hey,

Ist es möglich mit C# einen Webserver zu Simulieren?
Er soll den localhost (127.0.0.1) Simulieren.

Ich mache mal kurz ein Beispiel:

Code:
127.0.0.1/site/index.php?Parameter1=11234&Parameter2=213123

Ich möchte mit meinem C# Programm diese Parameter auslesen und etwas zurückgeben können.

Ist dieses so irgendwie möglich?

Viele Grüße
Peter
 
Klar, einfach nen Socket auf Port 80 öffnen. Dann noch HTTP parsen. Gibt's sicherlich irgendwo schon fertig.
 
Ich habe nun ein Script gefunden welches über ein NetworkStream die Daten bekommt:

Code:
            WindowsPrincipal pricipal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
            bool hasAdministrativeRight = pricipal.IsInRole(WindowsBuiltInRole.Administrator);
            if (hasAdministrativeRight == true)
            {
                TcpListener server;
                Int32 port = 80;
                IPAddress localAddr = IPAddress.Parse("127.0.0.1");
                server = new TcpListener(localAddr, port);
                server.Start();
                Byte[] bytes = new Byte[256];
                String data = null;
                while (true)
                {
                    Console.Write("Waiting for a connection... ");
                    TcpClient client = server.AcceptTcpClient();
                    Console.WriteLine("Connected!");
                    data = null;
                    NetworkStream stream = client.GetStream();
                    int i;
                    while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
                    {
                        data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
                        Console.WriteLine("Received: {0}", data);
                        data = data.ToUpper();

                        byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);
                        stream.Write(msg, 0, msg.Length);
                        Console.WriteLine("Sent: {0}", data);
                    }   

                    client.Close();

Ich sehe auch wie er die Parameter von diesem Beispiel bekommt:
Code:
127.0.0.1/site/index.php?Parameter1=11234&Parameter2=213123

Wie kann ich dem "Client" jetzt etwas zurücksenden?

Biespiel:
Code:
<?php
echo 'Hallo';
?>
 
PHP-Code willst du ja sicher nicht zurücksenden, sondern HTML.

Du solltest gunters Link nicht ignorieren. "Scripts finden" ist schlecht. Gefundener Code, den man nicht versteht, hilft kein Stück weiter.
 
Du hast hier echt ein Verständnisproblem, glaub ich...
- Wenn du mit PHP arbeiten willst, dann musst du auch einen PHP-fähigen Webserver verwenden. Das heißt: Apache, IIS, nginx, Cherokee, lighttpd. Die haben die nötige Ausrüstung, um PHP zu parsen bzw. einen separaten Parser via CGI zu starten.
- Wenn du eine eigene Anwendung (hier eben in C#, denkbar wäre auch Node.JS, C++, Java,...) schreiben willst, die auf Port 80 lauscht und auf Anfragen antwortet, dann hat das nichts mehr mit PHP zu tun. All deine Programmlogik schreibst du innerhalb der Anwendung.
 
Daaron schrieb:
Du hast hier echt ein Verständnisproblem, glaub ich...
- Wenn du mit PHP arbeiten willst, dann musst du auch einen PHP-fähigen Webserver verwenden. Das heißt: Apache, IIS, nginx, Cherokee, lighttpd. Die haben die nötige Ausrüstung, um PHP zu parsen bzw. einen separaten Parser via CGI zu starten.
- Wenn du eine eigene Anwendung (hier eben in C#, denkbar wäre auch Node.JS, C++, Java,...) schreiben willst, die auf Port 80 lauscht und auf Anfragen antwortet, dann hat das nichts mehr mit PHP zu tun. All deine Programmlogik schreibst du innerhalb der Anwendung.

Ah okay, habe es wirklich ein bisschen falsch verstanden ;)

Ich muss jetzt halt schauen was der der "reale" Server zurückgeben würde und muss mir den rückgabe string selber zusammenbasteln, mal schauen wie so eine php antowrt aussieht....
 
Es gibt keine PHP-Antwort... nicht in dem Sinne, wie du wahrscheinlich grad denkst. PHP gibt i.d.R. einfahc nur HTML zurück. Manchmal gibt es auch andere Medientypen wie PDF, Audio, Bilder oder einfach nur Text (XML, JSON,....) zurück.
Das alles entspricht aber immer noch den üblichen HTTP - Headers.

Was willst du denn eigentlich machen? Wozu C#? Das ist keine Sprache, die auf Webservern wirklich Sinn macht, wie ich finde. Die ist viel zu sehr um Bunti-Klicki herum gebaut worden. Für Windows-basierte Desktop Apps mag das toll sein, für das was du machen willst ist es totaler Quark.
 
In Verbindung mit ASP.NET ist C# durchaus auch im Web-Umfeld vertreten ;)

Allerdings auf ganz andere Weise als es vom TE vermutlich angedacht ist. Ähnlich wie PHP-Code vom Apache oder Java-Servlets vom Tomcat aufgerufen werden, wird bei ASP.NET der C#-Code ("Code behind") vom IIS aufgerufen. Der TE hatte aber wohl eher im Sinn, den Webserver selbst zu programmieren, also den Apache/Tomcat/IIS zu ersetzen.
 
Jede Sprache, die es erlaubt, an einen TCP-Port zu binden, eignet sich zum Bau eines Webservers.
Ob man das schön findet, spielt keine Rolle. Wenn OP das in C# machen möchte, sehe ich keinen
Grund, warum er es lassen sollte.
 
Tja, aber der TE war mit seiner anfänglichen Herangehensweise soweit ab vom Schuss, dass er auch gleich Nägel mit Köpfen machen kann.

Außerdem: Wenn du so herangehst, dann kannst du deinen Server auch in reinem PHP schreiben, ohne einen Apache o.ä. drumherum. Schließlich kann PHP ja auch Sockets erzeugen und dann lauschen.
Würde aber trotzdem wohl keiner machen, hab zumindest von keinem Fall gehört, wo so etwas in einer realistischen Umgebung praktiziert wird.
 
Ich würde auch keinen Webserver in C# schreiben. Und ich würde überhaupt nichts in PHP schreiben.
Aber die Gründe sind beide Male persönliche Vorliebe und was in einer "realistischen Umgebung" statt-
findet ist hier auch völlig nebensächlich. Wenn OP Bock drauf hat, soll er es machen. Es gibt nun wirklich
schlimmere Ideen, als diese. Und womöglich lernt er am Ende noch etwas davon. Wäre ja furchtbar, das
mit einem Projekt zu machen, das nicht COMPUTERBASE-SCALABLE-ENTERPRISE-SOLUTIONS-SEAL-OF-
APPROVAL hat!

Die Zeilenumbrüche widme ich Daaron.
 
Du kannst deine Zeit auch damit verbringen, dass du lernst aus einem Baum ein Kanu zu schnitzen. Wenn du dich aber nicht einem Eingeborenen - Stamm anschließen willst, ist diese Fähigkeit ziemlich nutzlos.
Und nochmal: Der TE ist mit völlig falschen Vorstellungen an das Problem herangegangen. Er wollte eher einen PHP-Interpreter in C# mit eingebautem Webserver schreiben, keinen reinen Webdienst für ein spezifisches Problem. Hier steht der Aufwand in gar keinem Verhältnis zum Nutzen.
 
Zurück
Oben