AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi IdSimpleServer: Wie Daten senden?
Thema durchsuchen
Ansicht
Themen-Optionen

IdSimpleServer: Wie Daten senden?

Ein Thema von DevilsCamp · begonnen am 1. Sep 2004 · letzter Beitrag vom 6. Sep 2004
Antwort Antwort
Seite 1 von 2  1 2      
DevilsCamp
(Gast)

n/a Beiträge
 
#1

IdSimpleServer: Wie Daten senden?

  Alt 1. Sep 2004, 14:02
Kann mir einer von euch erklären, wie ich die Komponente TIdSimpleServer mit einer TIdTCPClient Komponente nutzen kann?

Ich kann zwar connecten, aber keine Daten senden...
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: IdSimpleServer: Wie Daten senden?

  Alt 1. Sep 2004, 14:04
Ich hab' Indy im Moment nicht auf dem Rechner, aber kuck mal, ob es ein Write***() in der Komponente gibt. Wenn es nicht DIREKT in der Komponente verbaut ist, sollte es unter Connection.Write***() sein.
  Mit Zitat antworten Zitat
DevilsCamp
(Gast)

n/a Beiträge
 
#3

Re: IdSimpleServer: Wie Daten senden?

  Alt 1. Sep 2004, 16:16
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, IdTCPClient, IdBaseComponent, IdComponent,
  IdTCPConnection, IdSimpleServer;

type
  TForm1 = class(TForm)
    IdSimpleServer1: TIdSimpleServer;
    IdTCPClient1: TIdTCPClient;
    Button1: TButton;
    ProgressBar1: TProgressBar;
    CheckBox1: TCheckBox;
    Edit1: TEdit;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure IdSimpleServer1Work(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCount: Integer);
    procedure IdSimpleServer1WorkBegin(Sender: TObject;
      AWorkMode: TWorkMode; const AWorkCountMax: Integer);
    procedure IdSimpleServer1Status(ASender: TObject;
      const AStatus: TIdStatus; const AStatusText: String);
    procedure IdSimpleServer1Disconnected(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
   if IdTCPClient1.Connected then begin
      IdTCPClient1.Disconnect;
      Button1.Caption   := '0';
   end else begin
      IdTCPClient1.Connect(2500);
      if IdTCPClient1.Connected then
         Button1.Caption   := '1'
      else
         Button1.Caption   := '0';
   end;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
   if CheckBox1.Checked then
      IdSimpleServer1.Listen
   else
      IdSimpleServer1.EndListen;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   if IdTCPClient1.Connected then
      IdTCPClient1.WriteLn(Edit1.Text);
end;

procedure TForm1.IdSimpleServer1Work(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
   Caption   := IdSimpleServer1.ReadLn(#$A, 2500);
end;

procedure TForm1.IdSimpleServer1WorkBegin(Sender: TObject;
  AWorkMode: TWorkMode; const AWorkCountMax: Integer);
var
   i   : Integer;
begin
   i   := 0;
end;

procedure TForm1.IdSimpleServer1Status(ASender: TObject;
  const AStatus: TIdStatus; const AStatusText: String);
var
   i   : Integer;
begin
   i   := 0;
end;

procedure TForm1.IdSimpleServer1Disconnected(Sender: TObject);
begin
   IdSimpleServer1.EndListen;
   CheckBox1.Checked   := false;
end;

end.
Dieses ist mein Programm.
Es beinhaltet sowohl einen SimpleServer als auch ein TIdTCPClient. Ziel ist es, einem kleinen, ICQ-ähnlichem Programm die Möglichkeit zu geben, Dateien zu versenden.
Leider reagiert der IdSimpleServer weder auf das OnStatus Ereignis, noch auf OnWork, OnWorkBegin oder OnWorkEnd.
Daher kann der Server nicht erkennen, ob ein Client connected ist und Daten sendet.

Vielleicht kann mir jemand helfen...
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#4

Re: IdSimpleServer: Wie Daten senden?

  Alt 2. Sep 2004, 14:38
In diesem Fall solltest du keinen IdSimpleServer benutzen, sondern die TIdTCPClient.WriteFile() - FUnktion nutzen. DIese FUnktion öffnet eine Datei auf einem Datenträger und versendet sie binär an den Server, der kann das ganze dann verarbeiten/weiterleiten/etc.
  Mit Zitat antworten Zitat
DevilsCamp
(Gast)

n/a Beiträge
 
#5

Re: IdSimpleServer: Wie Daten senden?

  Alt 2. Sep 2004, 16:11
nur was nutzt es mir, wenn ich beim der Server-Komponente keine Möglichkeit habe zu überprüfen, ob der Client gerade was sendet?

Ich muss ja schliesslich der Server-Komponente sagen, wo er die Datei dann abspeichern soll...
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#6

Re: IdSimpleServer: Wie Daten senden?

  Alt 2. Sep 2004, 16:49
Sende dem Server doch verher sowas:


Code:
/getfile saveat:C:\my.file response:no endresponse:yes
Das "response" ist bewusst angefügt, damit man dem Server mitteilt, ob er erst bestätigen soll, das er die Datei erhalten kann.
Das "endresponse" ist dafür gedacht, dem Client zu sagen "Datei ist angekommen".
  Mit Zitat antworten Zitat
DevilsCamp
(Gast)

n/a Beiträge
 
#7

Re: IdSimpleServer: Wie Daten senden?

  Alt 2. Sep 2004, 16:58
Ich habe mich wohl etwas unglücklich ausgedrückt.

Welche Events des IdSimpleServers werden ausgelöst, wenn ich folgende Tätigkeiten mit dem Client ausführe:


1. IdTCPClient.Connect
2. IdTCPClient.WriteLn
3. IdTCPClient.WriteFile
4. IdTCPClient.Disconnect


In allen 4 Fällen reagieren leider weder:
IdSimpleServer.OnStatus
IdSimpleServer.OnWork
IdSimpleServer.OnWorkBegin
IdSimpleServer.OnWorkEnd
IdSimpleServer.OnDisconnect

(und das sind alle Events des SimpleServers)

Ich habe also keine Möglichkeit auf irgendeine Aktion des IdTCPCLients zu reagieren...
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#8

Re: IdSimpleServer: Wie Daten senden?

  Alt 2. Sep 2004, 17:00
Doch: bei OnStatus checkst du, ob ein Kommando (wie das von mir) vorliegt, um es entsprechend zu verarbeiten.
  Mit Zitat antworten Zitat
DevilsCamp
(Gast)

n/a Beiträge
 
#9

Re: IdSimpleServer: Wie Daten senden?

  Alt 2. Sep 2004, 17:04
ich habe folgendes beim OnStatus-Event stehen:
Delphi-Quellcode:
procedure TForm1.IdSimpleServer1Status(ASender: TObject;
  const AStatus: TIdStatus; const AStatusText: String);
var
   i : Integer;
begin
   i := 0;
end;
und bei i:=0 einen Breakpunkt (Optimierung des Kompiliers ist ausgeschaltet).
Doch leider bleibt das Programm nicht stehen, wenn ich mit einem CLient connecte....
Und das sollte es doch eigentlich, wenn das OnStatus-Event ausgelöst wird, oder?
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#10

Re: IdSimpleServer: Wie Daten senden?

  Alt 2. Sep 2004, 17:11
Du kannst stattdessen schreiben:
Delphi-Quellcode:
i := Length(AStatusMessage);
height := height - i;
Dann würde das gehen.
  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 13:31 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