AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit TServerSocket

Ein Thema von Bornemaxx · begonnen am 19. Jan 2016 · letzter Beitrag vom 19. Jan 2016
Antwort Antwort
Bornemaxx

Registriert seit: 28. Nov 2007
9 Beiträge
 
#1

Problem mit TServerSocket

  Alt 19. Jan 2016, 10:38
Hallo an alle, die hier fleißig ihr Wissen teilen.
Ich hoffe, ich kann davon profitieren
Meine Suche war leider erfolglos, ich weiß aber auch nicht sor richtig, wonach ich suchen soll.
Am besten ich erkläre dazu mal mein Problem:
Ich habe ein Programm, welches Daten für einen Browser zur Verfügung stellt. Das hat bisher auch ganz gut funktioniert, leider wird der HTML-Inhalt im aktuellen Firefox oder Opera als Quelltext angezeigt. Mit dem IE oder einer älteren Firefox funktioniert es. In einem kleinen Testprogramm nutze ich dafür ein Memo-Feld, in das ich den HTML-Text schreibe. Dieser sieht momentan so aus:
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de-de" lang="de-de" >
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Administration</title>
</head>
<body>
<h1>Administration</h1>
</body>
</html>
Das Senden des Textes erledige ich mittels
Delphi-Quellcode:
  index:=Tstringlist.create;
  index.Clear;
  index.AddStrings(memo1.lines);
  Socket.SendText(index.Text);
  Socket.Close;
Der Umweg über die Stringliste ist drin, weil es im "richtigen" Programm nur diese gibt.
Der IE zeigt danach erwartungsgemäß das fett geschriebene Wort "Administration", der Firefox und Opera zeigen leider exakt den Text wie er im Memofeld steht. Mit einer älteren Version (genaue Version nicht bekannt) hat es aber funktioniert.
Das HTML-Schnipsel wird bei "http://validator.w3.org/check" als gültig erkannt.

Was kann ich noch tun ???

Vielen Dank schon mal im Voraus.

Viele Grüße Mirko
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Problem mit TServerSocket

  Alt 19. Jan 2016, 11:09
Wenn du schon groß verkündest, dass du charset=utf-8 hast, und dann aber einen (Delphi-Referenz durchsuchenTCustomWinSocket.SendText) AnsiString versendest (der je nach Delphi-Version von einem AnsiString oder UnicodeString (UTF-16) gebildet wird) dann ist das Verhalten beim IE darauf zurückzuführen, dass der dir milde lächelnd diesen Fauxpas verzeiht. Denn du verschickst definitiv nichts als UTF-8 kodiertes.

Die anderen verhalten sich streng nach den Regeln
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#3

AW: Problem mit TServerSocket

  Alt 19. Jan 2016, 11:11
Zitat:
Was kann ich noch tun ???
Den Unterschied zwischen HTML und HTTP verstehen

Das HTML mag gültig sein, aber der Browser sendet einen HTTP GET Request und erwartet eine HTTP Response. Diese besteht nicht nur aus dem HTML als 'Fracht', sondern kann (bzw. - je nachdem muss ...) auch Header enthalten:

What HTTP response headers are required

Wenn der Server dem Browser (Client) nicht mitteilt um welchen Content-Type es sich handelt, kann der Browser ihn einfach als "application/octet-stream" darstellen. (https://tools.ietf.org/html/rfc7231#section-3.1.1.5)
Michael Justin

Geändert von mjustin (19. Jan 2016 um 11:16 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.142 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Problem mit TServerSocket

  Alt 19. Jan 2016, 11:46
Warum nimmst Du nicht einfache eine THttpServer Komponente?
  Mit Zitat antworten Zitat
Bornemaxx

Registriert seit: 28. Nov 2007
9 Beiträge
 
#5

AW: Problem mit TServerSocket

  Alt 19. Jan 2016, 13:47
Vielen Dank für die schnellen Antworten.
@Sir Rufo:
Die ganzen Formatierungsgeschichten habe ich jetzt erst reingenommen, weil ich gehofft hatte, dass es damit funtkioniert.
@Mavarik:
Die THttpServer Komponente kann ich nicht finden, könnte am Delphi 5 liegen

Der Tip von mjustin passt am besten ! Man muss eben den kompletten HTTP-Verkehr nachahmen. Wobei komplett schon wieder übertrieben ist. Es reicht, wenn man die Statusmeldung "HTTP/1.1 200 OK" als ersten String schickt. Auf den Rest kann man - zumindest in meiner Testanwendung - verzichten.

Also Danke noch mal und viele Grüße

Mirko
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz