Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Chat FTP Server (https://www.delphipraxis.net/67540-chat-ftp-server.html)

kaschte 17. Apr 2006 11:47

Re: Chat FTP Server
 
Du bist ein Genie. Und ich ein Holzkopf. Also, jetzt kommt keine Fehlermeldung mehr es passiert einfach nix. Die Datei die sich bereits auf dem Server befindet bleibt leer :(. Hier noch einmal die beiden Quelltexte:

Delphi-Quellcode:
unit chatpas;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Winsock, ScktComp, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase, IdFTP, IdHTTP;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Message: TLabel;
    Sendtext: TEdit;
    Send: TButton;
    Connect: TButton;
    ListBox1: TListBox;
    Nicknametext: TEdit;
    Nickname: TLabel;
    ListBox2: TListBox;
    ServerSocket1: TServerSocket;
    ClientSocket1: TClientSocket;
    IdHTTP1: TIdHTTP;
    procedure ConnectClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Lines.Delete(0);
end;

function GetLocalIPs(const Lines:TStrings):Boolean;
type
  PPInAddr= ^PInAddr;
var
  wsaData: TWSAData;
  HostInfo: PHostEnt;
  HostName: Array[0..255] of Char;
  Addr: PPInAddr;
begin
  Result:=False;
  Lines.Clear;
  if WSAStartup($0102, wsaData)=0 then
  try
    if gethostname(HostName, SizeOf(HostName)) = 0 then Begin
       HostInfo:= gethostbyname(HostName);
       if HostInfo<>nil then Begin
          Addr:=Pointer(HostInfo^.h_addr_list);
          if (Addr<>nil) AND (Addr^<>nil) then
             Repeat
                    Lines.Add(StrPas(inet_ntoa(Addr^^)));
                    inc(Addr);
             Until Addr^=nil;
       end;
    end;
    Result:=True;
  finally
    WSACleanup;
  end;
end;

procedure TForm1.ConnectClick(Sender: TObject);
var idhttp1: TIdhttp;
    parameter: TStringlist;
begin
  if not GetLocalIPs(Listbox2.Items) then
     MessageDLG('Keine IP-Adresse',mtInformation,[mbOK],0);
  Parameter:=TStringlist.Create;
  idhttp1 := TIdhttp.Create(nil);
  parameter.Add('nickname=nicknametext.text');
  parameter.Add('ip=listbox1.items(0)');
  idhttp1.Post('http://sbinder.sb.funpic.de/users.php', parameter);
  idhttp1.Free;
end;

end.
PHP Datei:
Delphi-Quellcode:
<?
$inhalt = $_POST['nickname'] $_POST['ip'];
$filename = 'users.txt';
$handle = fopen($filename, "a")
fwrite($handle, $inhalt);
fclose($handle);
?>

fkerber 17. Apr 2006 12:04

Re: Chat FTP Server
 
Hi!

Zwei Sachen mal vorneweg, bevor man überhaupt nach anderen Sachen sucht:
Du solltest bei der StringList mit Try..Finally arbeiten und sie auch wieder freigeben und außerdem solltest du dir Gedanken über den Umgang mit Strings machen.

Im Moment steht in Nickname z.B. immer drin
nicknametext.text;

Richtigerweise sollte es wohl so aussehen:
Delphi-Quellcode:
parameter.Add('nickname='+nicknametext.text);

Ciao Frederic

P.S. Ein Genie bin ich nicht :wink:

kaschte 17. Apr 2006 12:08

Re: Chat FTP Server
 
Mir kommt es aber so vor als wärst du ein Genie ;)

Also das mit dem try finall usw. komme ich noch nicht ganz draus aber damit beschäftige ich mich später dann (oder ist das dass Problem???).

Das mit dem Nickname (das +) ändere ich gleich mal, muss das auch bei IP rein?? Achja und stimmt das bei IP das im Klammer ne 0 ist. Hab ich rein gemacht weil bei mir zBs. mehrere IP's laufen, weil ich vmware (Sandboxteil) habe. Mit 0 ist doch die erste Zeile gemeint oder?

EDIT: Was meinst du mit "Gedanken über den Umgang mit Strings"?

fkerber 17. Apr 2006 12:11

Re: Chat FTP Server
 
Hi!

Ja, bei IP musst du das auch ändern.
0 gibt auch rein theoretisch die erste Zeile an, nur von welcher Listbox überhaupt? Du rufst ja GetLocalIps für Listbox2 auf, oder?


Ciao Frederic

Zum Edit:
Das meinte ich wegen dem Hinzufügen mit dem +....

kaschte 17. Apr 2006 12:14

Re: Chat FTP Server
 
Naja, das ganze speichert es ja in Listbox 2 (ich schreib das nachher mal in die Formcreate damit es gleich von Anfang an drin ist) und die Listbox 2 hab ich auf Unsichtbar, sie dient quasi als Zwischenspeicher für die IP weil ich sonst nicht weiss wie ich es einfacher machen könnte.

EDIT: Wenn ich IP auf

Delphi-Quellcode:
  parameter.Add('ip='+listbox1.items(0));
ändere dann kommt beim compilieren die Meldung das ein Operator oder ein Semikolon fehlt.

fkerber 17. Apr 2006 12:15

Re: Chat FTP Server
 
Hi!

Ja, das ist mir klar, aber bei der Parameterübergabe rufst du doch Zeile 1 (bzw. Index 0) von Listbox1 auf, oder?


Ciao Frederic

kaschte 17. Apr 2006 12:18

Re: Chat FTP Server
 
Nö von Listbox 2 weil ich ja am Anfang (jetzt in der Formcreate) meine IP dort hinein speichere.


EDIT: Siehe noch EDIT meines letzten Posts

EDITEDIT: Sorry habe Listbox 1 im Quelltext geschrieben. Habe es geändert.

ghost007 17. Apr 2006 12:29

Re: Chat FTP Server
 
Hi,
mal ne blöde frage,
du nimmst doch die lokale IP, oder?
Bei den meisten ist standartmäßig 192.168.0.1 die lokale IP.
d.h.Die IP aller user ist gleich ?!

kaschte 17. Apr 2006 12:32

Re: Chat FTP Server
 
Nicht unbedingt. Aber wie kann ich dann die andere IP rausfinden. Die, die man zBs. hier http://www.wieistmeineip.de/ bekommt?

fkerber 17. Apr 2006 12:37

Re: Chat FTP Server
 
Hi!

Also es muss
Delphi-Quellcode:
Listbox1.Items[0]
heißen.

Zum Thema der globalen oder externen Ip gibts hier massenweise Threads:
einfach mal suchen.


Ciao Frederic

ghost007 17. Apr 2006 12:40

Re: Chat FTP Server
 
musste hier einfach mal im forum suchen, ich glaub du musst ne php seite uploaden, die die internet IP zurückwirft und dnan kannst du die mit idHTTPget oder so auslesen, bin mir aber nicht sicher, hab da nur mal was gelesen hier im forum

EDIT:... fkerber war schneller ...

kaschte 17. Apr 2006 12:46

Re: Chat FTP Server
 
Ok, werd ich dann mal.

Übrigens der Fehler ist weg (danke fkerber) aber die Datei ist und bleibt leer.

fkerber 17. Apr 2006 13:15

Re: Chat FTP Server
 
Hi!

Funktioniert es denn, wenn du die PHP-Datei im Browser aufrufst (natürlich mit Parameter)?


Ciao Frederic

kaschte 17. Apr 2006 13:16

Re: Chat FTP Server
 
Wie ruf ich das teil mit paramter auf?

fkerber 17. Apr 2006 13:17

Re: Chat FTP Server
 
Hi!

http://sbinder.sb.funpic.de/users.ph...test&id=testid
(sofern die Adresse stimmt...)

Edit:
Ein Klick auf den Link zeigt schon, dass da was nicht passt...

Siehe da:
Delphi-Quellcode:
<? 
$inhalt = $_POST['nickname'] $_POST['ip'];
$filename = 'users.txt';
$handle = fopen($filename, "a")
fwrite($handle, $inhalt);
fclose($handle);
?>
Fehler in Zeile 1 - richtig wäre: $inhalt = $_POST['nickname']; (oder ein + dazischen oder war es bei PHP ein . ? :gruebel:


Ciao Frederic

kaschte 17. Apr 2006 13:20

Re: Chat FTP Server
 
Zitat:

Zitat von fkerber
Hi!

http://sbinder.sb.funpic.de/users.ph...test&id=testid
(sofern die Adresse stimmt...)

Edit:
Ein Klick auf den Link zeigt schon, dass da was nicht passt...

Siehe da:
Delphi-Quellcode:
<? 
$inhalt = $_POST['nickname'] $_POST['ip'];
$filename = 'users.txt';
$handle = fopen($filename, "a")
fwrite($handle, $inhalt);
fclose($handle);
?>
Fehler in Zeile 1 - richtig wäre: $inhalt = $_POST['nickname'];


Ciao Frederic

Eigentlich sollte es nicht id= sondern ip= heissen aber macht keinen Unterschied. Funzt trotzdem nicht.

fkerber 17. Apr 2006 13:21

Re: Chat FTP Server
 
Hi!

Jepp, dazu siehe mein Edit...


Ciao Frederic

kaschte 17. Apr 2006 13:26

Re: Chat FTP Server
 
Aber dazu muss ich ja zwei Variablen machen und dann geht das mit dem fwrite Befehl nicht mehr so oder?

Delphi-Quellcode:
<?
$inhalt = $_POST['nickname'];
$inhalt2 = $_POST['ip'];
$filename = 'users.txt';
$handle = fopen($filename, "a")
fwrite($handle, $inhalt $inhalt2);
fclose($handle);
?>
Oder sollte ich so?

[delphi]<?
$inhalt = $inhalt2 $inhalt3
$inhalt2 = $_POST['nickname'];
$inhalt3 = $_POST['ip'];
$filename = 'users.txt';
$handle = fopen($filename, "a")
fwrite($handle, $inhalt);
fclose($handle);
?>

PS: Funzt immer noch nicht.

fkerber 17. Apr 2006 13:29

Re: Chat FTP Server
 
Hi!

Ich denke, es sollte so aussehen:

Code:
<? 
$inhalt = $_POST['nickname'].$_POST['ip'];
$filename = 'users.txt';
$handle = fopen($filename, "a")
fwrite($handle, $inhalt);
fclose($handle);
?>

Ciao Frederic

kaschte 17. Apr 2006 13:33

Re: Chat FTP Server
 
Zitat:

Zitat von fkerber
Hi!

Ich denke, es sollte so aussehen:

Code:
<? 
$inhalt = $_POST['nickname'].$_POST['ip'];
$filename = 'users.txt';
$handle = fopen($filename, "a")
fwrite($handle, $inhalt);
fclose($handle);
?>

Ciao Frederic

Ok habe ich gemacht. users.txt bleibt immer noch leer. Anscheinend sei jetzt was mit nehm TString on line 5 was nicht in Ordnung. Hat er was gegen meine Variable $filenmae oder wat?

fkerber 17. Apr 2006 13:38

Re: Chat FTP Server
 
Hi!

Dann schau dir mal das hier an:
http://de.php.net/fwrite

FWrite liefert etwas zurück, damit solltest du irgendwas machen (und wenn du es nur in ne Dummy-Variable schreibst)
Sonst steht da ein sinnloser String rum...

Ciao Frederic

kaschte 17. Apr 2006 13:40

Re: Chat FTP Server
 
Ja so ne Bytegrösse oder so. Wie bring ich den in ne Variable?

fkerber 17. Apr 2006 13:41

Re: Chat FTP Server
 
Hi!

Delphi-Quellcode:
$dummy = fwrite(usw. usf.)
Ciao Frederic

kaschte 17. Apr 2006 13:42

Re: Chat FTP Server
 
Zitat:

Zitat von fkerber
Hi!

Delphi-Quellcode:
$dummy = fwrite(usw. usf.)
Ciao Frederic

Heisst das wirklich usw. usf. ?????

fkerber 17. Apr 2006 13:44

Re: Chat FTP Server
 
Hi!

Nein, natürlich nicht, wollte jetzt nur nicht nochmal zurückblättern. Übernimm den fwrite-Ausdruck von vorher und weiß es dem dummy zu .


Ciao Frederic

kaschte 17. Apr 2006 13:47

Re: Chat FTP Server
 
Zitat:

Zitat von fkerber
Hi!

Nein, natürlich nicht, wollte jetzt nur nicht nochmal zurückblättern. Übernimm den fwrite-Ausdruck von vorher und weiß es dem dummy zu .


Ciao Frederic

Achso, ok mach ich. Hm jetzt ist irgend ne variable in line 5 ned in Ordnung. Sorry aber ist wirklich zum Verzweiflen.

EDIT: Als Hilfe. Line 5 ist neu das hier
Delphi-Quellcode:
$dummy = fwrite($handle, $inhalt);
Gesamter PHP Quelltext:
Delphi-Quellcode:
<?
$inhalt = $_POST['nickname'].$_POST['ip'];
$filename = 'users.txt';
$handle = fopen($filename, "a")
$dummy = fwrite($handle, $inhalt);
fwrite($handle, $inhalt);
fclose($handle);
?>

fkerber 17. Apr 2006 13:50

Re: Chat FTP Server
 
Hi!

In Zeile 4 fehlt das ; am Ende.


Ciao Frederic

kaschte 17. Apr 2006 13:54

Re: Chat FTP Server
 
Zitat:

Zitat von fkerber
Hi!

In Zeile 4 fehlt das ; am Ende.


Ciao Frederic

Super!!!! Jetzt funzt es. Musste noch die Dummyvariable raus nehmen damit nicht alles zweimal vorkommt.

Kann man auch n Leerschlag zwischen dem Nicknamen und der IP machen und danach einen Abschnitt.
Und wie lösche ich danach wieder die Zeile wo mein Nickname drinsteht?

fkerber 17. Apr 2006 13:56

Re: Chat FTP Server
 
Hi!

Stimmt es war ja jetzt doppelt.

Also kompeltt mit Leerzeichen:
Delphi-Quellcode:
<? 
$inhalt = $_POST['nickname'].' '.$_POST['ip'];
$filename = 'users.txt';
$handle = fopen($filename, "a");
fwrite($handle, $inhalt);
fclose($handle);
?>
Was löschen angeht, da such doch mal etwas bei google, was du mit PHP und Dateien so anfangen kannst.


Ciao Frederic


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:21 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz