Entwickler-Ecke

Internet / Netzwerk - Kleines Problem mit TIdFTPServer (Indy)


ex4ct - Fr 14.04.06 00:40
Titel: Kleines Problem mit TIdFTPServer (Indy)
Ich hab mal wieder ein kleines Problem :-(
Ich verwende in meiner Server.exe den Komponenten TServerSocket.
Damit funktioniert alles also ich kan vom Clienten an den Server ohne Probleme Befehle senden.
Jetzt habe ich einen FTP-Server programmiert (funktioniert ohne Probleme).
Dafür habe ich den Komponenten von Indy benutzt.
Ich wollte diesen FTP-Server in den anderen Server(TServerSocket) einbauen,
aber da kommt eine Fehlermeldung bei mir (kompiliert richtig,Fehler kommt beim ausführen).


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ScktComp, MMSYSTEM, StdCtrls, ExtCtrls, ShellApi,Registry,WinInet,
  OleCtrls, SHDocVw, IdBaseComponent, IdComponent, IdTCPServer, IdFTPServer;

....

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
myString: String;
buff : array[0..MAX_COMPUTERNAME_LENGTH] of char;
nsize : DWORD;
rc : hwnd;

begin
nsize := SizeOf(buff);
myString := Socket.ReceiveText;

.....
...
..
else if MyString = 'FTPaktivieren' then IdFTPServer.Active := true
else if MyString = 'FTPdeaktivieren' then IdFTPServer.Active := false
......
..
end;


Als Fehlermeldung kommt dies:
Im Projekt Project.exe ist eine Exeption der Klasse ESocketError aufgetreten. Meldung:
"Windows Socket Fehler: Normalerweise darf jede Socketadresse nur jeweils einmal verwendet werden (10048), auf API "bind". Prozess wurde angehalten.
Mit einzelne Anweisung oder Start fortsezten.

Screenshot hab ich auch hochgeladen!


Born-to-Frag - Fr 14.04.06 01:02

Du startest 2 Server auf den gleichen Port.. oder versuchst es zumindest ;)

Du musst natürlich andere Ports nehmen..


ex4ct - Fr 14.04.06 09:37

Wie soll ich vom FTP Clienten einen Text an den Server senden?

So hab ich es versucht aber geht nicht:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Button43Click(Sender: TObject);
begin
IdFTP1.http://FTP.SendText('FTPAktivieren');
end;

procedure TForm1.Button44Click(Sender: TObject);
begin
IdFTP1.http://FTP.SendText('FTPDeaktivieren');
end;


ex4ct - Fr 14.04.06 09:43

Geht das eigentlich, kann man den FTP-Server über den FTP-Clienten öffnen und schließen??
Bestimmt oder??


Born-to-Frag - Fr 14.04.06 10:45

Das geht schon, aktivieren musst du aber dann an einen nanderen Server schicken (machst du ja glaub ich auch), aber die Ports müssen sich unterscheiden!!


ex4ct - Fr 14.04.06 11:02

user profile iconBorn-to-Frag hat folgendes geschrieben:
Das geht schon, aktivieren musst du aber dann an einen nanderen Server schicken (machst du ja glaub ich auch), aber die Ports müssen sich unterscheiden!!

Ich habe mein Fehler gefunden. Ich muss den FTP-Server mit einem Befehl von dem FTP-Clienten aktivieren, leider weiß ich nicht wie das geht.
Bei dem TClientSocket Komponenten geht das ja so hier:

Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Button40Click(Sender: TObject);
begin
clientsocket1.socket.sendtext('aufrufen');
end;

'aufrufen' kann dann beim Server bearbeitet werden.


Born-to-Frag - Fr 14.04.06 11:05

Das geht garnicht, du musst schon mit deinem TClientSocket eine Nachriccht an deinen TServerSocket schicken. Wenn der FTP Server nicht aktiviert ist empfängt er ja auch keine Nachrichten


ex4ct - Fr 14.04.06 11:07

user profile iconBorn-to-Frag hat folgendes geschrieben:
Das geht garnicht, du musst schon mit deinem TClientSocket eine Nachriccht an deinen TServerSocket schicken. Wenn der FTP Server nicht aktiviert ist empfängt er ja auch keine Nachrichten

Das würde ja eigentlich gehen aber am Anfang habe ich genau das versucht was du geschrieben hast, aber da kam ja diese fehlermeldung.
---> Hab dir eine PN geschickt!


Born-to-Frag - Fr 14.04.06 11:09

Weil beide auf dem selben Port laufen :roll: Hast du das schon geändert?


ex4ct - Fr 14.04.06 11:11

user profile iconBorn-to-Frag hat folgendes geschrieben:
Weil beide auf dem selben Port laufen :roll: Hast du das schon geändert?

Nein, der FTP Port ist 21.


Born-to-Frag - Fr 14.04.06 11:11

beim TidFTPServer? Und beim TServerSocket?


ex4ct - Fr 14.04.06 11:14

TidFTPServer port: 21
TServerSocket port: 1533


ex4ct - Fr 14.04.06 12:03

PROBLEM GELÖST!! :D:D