C# Daten an Browser Schicken funktioniert nicht..

lordfritte

Lieutenant
Registriert
Juli 2006
Beiträge
993
Hallo ich möchte über einen TcpListener Anfragen von einem Webbrowser verabeiten und Daten wieder zurück schicken.
Aber es möchte nicht funktinieren:
Code:
byte[] contentBytes = Encoding.UTF8.GetBytes("<html><head><title>Bla Bla Test</title></head><body>fdfdlfdl</body></html>");

      string sHeader = "";

      sHeader += "HTTP/1.1 200 Ok\r\n";
      sHeader += "Date: " + DateTime.Now.ToString("R") + "\r\n";
      sHeader += "Server: test Server\r\n";
      sHeader += "Connection: Keep-Alive\r\n";
      sHeader += "Content-Length:" + contentBytes.Length .ToString() + "\r\n";
      sHeader += "Content-Type: text/html";
      sHeader += "\r\n";

      byte[] headerBytes = Encoding.UTF8.GetBytes(sHeader);
      byte[] result = new byte[contentBytes.Length + headerBytes.Length];

      Array.Copy(headerBytes, result, headerBytes.Length);
      Array.Copy(contentBytes, 0, result, headerBytes.Length, contentBytes.Length);

      string sTest = Encoding.UTF8.GetString(result);

      _client.Client.Send(result);
      _client.Close();

in sTest ist:
Code:
HTTP/1.1 200 Ok\r\nDate: Wed, 06 May 2009 00:49:13 GMT\r\nServer: test Server\r\nConnection: Keep-Alive\r\nContent-Length:74\r\nContent-Type: text/html\r\n
<html><head><title>Bla Bla Test</title></head><body>fdfdlfdl</body></html>

Das Browserfenster bleibt aber weiß, auch im Quellcode ist nichts zu sehen.

Wenn ich aber den ganzen Header weglassen, also: _client.Client.Send(Encoding.UTF8.GetBytes("BlaBla")); das sehe ich dann.. Also am Senden der Daten liegt es nicht.
 
Zuletzt bearbeitet:
Installier dir mal das Plug in HTTPLiveHeaders für den FireFox und guck nach was für Daten am Browser ankommen.
 
Irgendwie kommt nichts an, aber wie gesagt, wenn ich den Header weglasse, sehe ich den HTML Code im Browser.
Kann man den Header nicht einfach weglassen?
Ohne header läuft es ja...

Aber woran erkennt der Browser eigentlich wo der header aufhört und der Inhalt anfängt?
 
Zuletzt bearbeitet:
Vielleicht liegt es am HTTP Header. Versuch mal einfache Zeilenumbrüche "\n" und mach nach "Content-Type: text/html" zwei Zeilenumbrüche. Der Header endet bei einer Leerzeile.

Kommen bei _client.Client.Send(Encoding.UTF8.GetBytes("<html>BlaBla</html>")); auch die Tags an?
 
Ja also wenn ich das ganze ohne Header schicke, kommt der HTML Code an wie er ankommen soll und der Browser stellt ihn auch dar wie er es soll.
 
Zuletzt bearbeitet:
sHeader += "Content-Type: text/html";
hier fehlt ein \r\n

ich rate dir desweiteren dazu nicht pauschal HTTP/1.1 mit keep-alive zu returnen, sondern auf den request vom client einzugehen.
1) unterstützen nicht alle http clients version 1.1 (squid z.b.)
2) keep-alive sollte nur genutzt werden, wenn der client es so haben will. default ist close. und darüberhinaus ist keep-alive NUR bei HTTP/1.1 spezifiziert.
 
Zuletzt bearbeitet:
Leerzeichen und Leerzeilen sind ein Unterschied. Wie ich und IceMatrix schon gesagt haben. Hinter "Content-Type: text/html" gehört ein "\n\n". Damit entsteht eine Leerzeile zwischen den zwei Zeilenumbrüchen.
 
Kugg mal genau hin. Da werden auch "Validate by File Upload" und "Validate by Direct Input" als Tabs angeboten.
 

Ähnliche Themen

M
Antworten
2
Aufrufe
1.178
marcus locos
M
Zurück
Oben