Delphi-PRAXiS
Seite 5 von 7   « Erste     345 67      

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:46 Uhr.
Seite 5 von 7   « Erste     345 67      

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