AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TCP Socket (+ HTTP_GET) möglichst ohne Komponenten
Thema durchsuchen
Ansicht
Themen-Optionen

TCP Socket (+ HTTP_GET) möglichst ohne Komponenten

Ein Thema von chri_ri · begonnen am 20. Okt 2009 · letzter Beitrag vom 21. Okt 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von chri_ri
chri_ri

Registriert seit: 16. Okt 2007
Ort: Markkleeberg
37 Beiträge
 
Delphi 7 Enterprise
 
#1

TCP Socket (+ HTTP_GET) möglichst ohne Komponenten

  Alt 20. Okt 2009, 05:31
Hi erstmal^^
Also wie der Titel schon sagt suche Ich eine Möglichkeit eine TCP-Kommunikation möglichst ohne Komponenten wie z.B. Indy zu realisieren.

Mein Ziel ist ein möglichst kleines Programm, welches "nur" per HTTP_GET Daten abruft und speichert.

Möchte deshalb auf Formulare verzichten und nur in der Projekt-Datei (*.dpr) arbeiten, da Sie nicht benötigt werden und das Programm so klein wie möglich halten.



Das Problem ist:
Ich habe bisher nur mit Komponenten gearbeitet und weiß nicht, wie ich dies nun anpacken soll.

Habe versucht IdHTTP ohne eigenes Formular zu nutzen. Es funktioniert zwar aber ich erhalte viele verschiedenartige Fehlermeldungen.
Und sobald ich den Eintrag "Forms" aus der uses-Klausel entferne funktioniert es logischerweise garnicht mehr.


Nachdem ich eine Weile gegooglet hatte fand ich auch Codebeispiele für "Komponentenlose" TCP-Programmierung.
Jedoch war eines nicht wirklich funktionsfähig und das andere ließ sich nicht wirklich auf die Nutzung ohne "Extra-Unit" anpassen (oder zumindest hab ichs ned ganz hingekriegt).

Noch 'ne Frage: WinSock = WinAPI?




Wäre eigentlich schon sehr dankbar, wenn mich jemand in die richtige Richtung weißen würde, wonach ich suchen soll und/oder ein paar gute/weiterführende Links posten könnte.

Schonmal Vielen Dank im Vorraus!
Solche Fragen wurden sicher schon oft genug gestellt aber irgendwie find ich ned so recht, was ich suche.
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#2

Re: TCP Socket Programmierung möglichst ohne Komponenten

  Alt 20. Okt 2009, 09:19
Moin,

habe jetzt keine Zeit aber könnte dir wenn ich zuhause bin was schicken. Ist eine Unit, von TThread abgeleitet, die einfache HTTP-Requests machen kann (content-length und chunked encoding werden unterstützt, allerdings keine Kompression, keep-alive etc, also recht minimalistisch). Aber ich denke, bis es soweit ist, hast du schon viele Beispiele von anderen Menschen bekommen..
Und Winsock = Winapi. Würd ich mal so sagen.
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: TCP Socket Programmierung möglichst ohne Komponenten

  Alt 20. Okt 2009, 09:42
1. Die Vorstellung "ohne Komponenten"
Du willst ohne Komponenten, wie z.B. Indy arbeiten und versuchst dann eine Instanz von Tidhttp zu ertsellen? Wie passt das zusammen? --> Was willst du wirklich. Einfach nur keine Formulare (--> Konsolenanwendung) oder auch keine Komponenten wie Tidhttp oder TClientsocket etc. pp.

2. WinSock
WinSock ist die Unit, welche du in Delphi einbinden musst um nativ auf die WinAPI-Funktionen zur Socketprogrammierung zugriefen zu können (bzw. deren Deklarationen).

3. "ohne 'Extra-Unit' "
Was soll das heißen? Du kannst auch in einer Konsolenanwendung eine extra Unit anlegen um bestimmte Funktionen auszulagern / zu strukturieren. Du kannst auch eigene Klassen schreiben und verwenden ohne das Programm aufzublähen. --> Was stellst du dir genau vor?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: TCP Socket Programmierung möglichst ohne Komponenten

  Alt 20. Okt 2009, 10:01
Hallo,

Zitat:
Habe versucht IdHTTP ohne eigenes Formular zu nutzen. Es funktioniert zwar aber ich erhalte viele verschiedenartige Fehlermeldungen.
Also ohne Formular, nicht ohne Komponenten.

Zitat:
Und sobald ich den Eintrag "Forms" aus der uses-Klausel entferne funktioniert es logischerweise garnicht mehr.
Was funktioniert denn nicht ?


Es gibt hier ein Tutorial, die Indys in Turbo-Explorer zu benutzen.
(Ich finde es gerade nicht)

Man erzeugt die Komponente zur Laufzeit (TIndyCCC.Create(NIL))
und verknüpft dann die Events mit eigenen Prozeduren.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von chri_ri
chri_ri

Registriert seit: 16. Okt 2007
Ort: Markkleeberg
37 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: TCP Socket Programmierung möglichst ohne Komponenten

  Alt 20. Okt 2009, 16:00
Erstmal THX für die schnellen Antworten!^^

@eicht: minimalistisch klingt schonmal gut^^

Was ich eigentlich will:
Ein Programm, welches nur in der Lage ist HTTP_GET auszuführen um Daten zu laden und zu speichern und so klein wie möglich ist.
Deshalb möchte Ich möglichst unnötigen "Balast" wie z.B Forms vermeiden.

Tut mir leid, wenn ich mich etwas unklar ausgedrück habe.



mfg. chri_ri
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: TCP Socket Programmierung möglichst ohne Komponenten

  Alt 20. Okt 2009, 16:24
Hallo,

wie schon gesagt Indy kannst Du auch ohne Form nutzen.
Was für Daten willst Du denn laden, vielleicht reicht Dir ja
auch ein Delphi-Referenz durchsuchenURLDownloadToFile.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: TCP Socket Programmierung möglichst ohne Komponenten

  Alt 20. Okt 2009, 16:35
Ich empfehle: http://www.delphipraxis.net/internal...t.php?t=112681

Der Titel TCP Socket Programmierung möglichst ohne Komponenten ist übrigens falsch.
Es geht ja nicht um TCP Socket Programmierung sondern darum, wie man ohne Delphi Komponenten einen HTTP GET-Request senden und empfangen kann.
Andreas
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: TCP Socket Programmierung möglichst ohne Komponenten

  Alt 20. Okt 2009, 16:44
Hallo,

Zitat:
Deshalb möchte Ich möglichst unnötigen "Balast"
Forms-Ballast vermeiden, OK.
Aber alles von Grund auf Neu-Erfinden, statt z.B. Indy zu verwenden ?


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: TCP Socket Programmierung möglichst ohne Komponenten

  Alt 20. Okt 2009, 16:53
Ich schmeiß hier mal folgendes rein, falls es jemand interessiert:
(Wie man sieht eine Konsolenanwendung)
Delphi-Quellcode:
program Project1;

//mit Konsole
{$APPTYPE CONSOLE}


uses
  activeX;


//Deklaration des Interfaces für den Zugriff auf XMLHttp-Klasse vom Internet Explorer (von Delphi generieren lassen)
//Ich habe mal die von mir benötigten Funktionen von safecall auf stdcall umgewandelt.
type
  IXMLHTTPRequest = interface(IDispatch)
    ['{ED8C108D-4349-11D2-91A4-00C04F7969E8}']
    function open(const bstrMethod: WideString; const bstrUrl: WideString; varAsync: OleVariant;
                   bstrUser: OleVariant; bstrPassword: OleVariant):HResult; stdcall;
    procedure setRequestHeader(const bstrHeader: WideString; const bstrValue: WideString); safecall;
    function getResponseHeader(const bstrHeader: WideString): WideString; safecall;
    function getAllResponseHeaders: WideString; safecall;
    function send(varBody: OleVariant):Hresult; stdcall;
    procedure abort; safecall;
    function Get_status: Integer; safecall;
    function Get_statusText: WideString; safecall;
    function Get_responseXML: IDispatch; safecall;
    function Get_responseText: WideString; safecall;
    function Get_responseBody: OleVariant; safecall;
    function Get_responseStream: OleVariant; safecall;
    function Get_readyState: Integer; safecall;
    procedure Set_onreadystatechange(const Param1: IDispatch); safecall;
    property status: Integer read Get_status;
    property statusText: WideString read Get_statusText;
    property responseXML: IDispatch read Get_responseXML;
    property responseText: WideString read Get_responseText;
    property responseBody: OleVariant read Get_responseBody;
    property responseStream: OleVariant read Get_responseStream;
    property readyState: Integer read Get_readyState;
    property onreadystatechange: IDispatch write Set_onreadystatechange;
  end;

//name der Klasse als Ressource (dadurch kann man vom IE auch auf Opera oder auf eins der restlichen UnterschichtBrowser umsteigen ;) )
resourcestring
 ClassName='Msxml2.XMLHTTP';


//hier Ersetzen, was mit der heruntergeladenen Seite passieren soll.
procedure DoSomething(text:Widestring);
begin
  writeln(text);
  readln;
end;

//Herunterladen mittels XMLHttpRequest
procedure Run;
var XMLHttpRequest:IXMLHttpRequest;
    ClassID:TGUID;
begin
  if CLSIDFromProgID(PWideChar(WideString(LoadResString(@ClassName))),ClassID) <> s_ok then
    writeln('Fehler bei CLSIDFromProgID')
  else
  begin
    if CoCreateInstance(ClassID,nil,CLSCTX_INPROC_SERVER,IXMLHttpRequest,XMLhttpRequest) <> s_ok then
      writeln('Fehler bei CoCreateInstance')
    else
    begin
      if XMLHttpRequest.open('Get','http://www.delphipraxis.net/',false,'','')<>s_ok then
        writeln('Fehler bei XMLHttpRequest.open')
      else
      begin
        if XMLHttpRequest.send(0)<>s_ok then
          writeln('Fehler bei XMLHttpRequest.send')
        else
        begin
          if XMLHttpRequest.readyState=4 then
            DoSomething(XMLHttpRequest.responseText)
          else
            writeln('Fehler beim Laden des Dokuments');
        end;
      end;
    end;
  end;
end;


//Programmstart
begin
  coinitialize(nil);
  Run;
  couninitialize;
end.
Edit: Soviel rote Kästen: da war doch tatsächlich jemand schneller...
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von chri_ri
chri_ri

Registriert seit: 16. Okt 2007
Ort: Markkleeberg
37 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: TCP Socket Programmierung möglichst ohne Komponenten

  Alt 20. Okt 2009, 17:19
Hey erstmal vielen Dank erstmal!^^

muss mir das erstmal alles in Ruhe anschauen.

werde mich sicherlich wieder melden.



mfg. chri_ri
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 21:17 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