Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi IP Adresse von einem Rechner im INet finden (https://www.delphipraxis.net/23404-ip-adresse-von-einem-rechner-im-inet-finden.html)

F.W. 4. Jun 2004 18:36

Re: IP Adresse von einem Rechner im INet finden
 
Aha! :idea: Nagut, dann steht dem Prog ja jetzt nichts mehr im Wege!

Danke!

F.W. 5. Jun 2004 10:26

Re: IP Adresse von einem Rechner im INet finden
 
Doch noch ne Frage: Muss ich meinem Kumpel jetzt die IP meines Routers schicken, oder die meines Rechners, auf dem das Prog gerade läuft?

Sharky 5. Jun 2004 10:31

Re: IP Adresse von einem Rechner im INet finden
 
Zitat:

Zitat von F.W.
Doch noch ne Frage: Muss ich meinem Kumpel jetzt die IP meines Routers schicken, oder die meines Rechners, auf dem das Prog gerade läuft?

Die des Routers. Im Router musst Du dann eine Port-Weiterleitung zu der IP deines Rechners eintragen. Als Port natürlich der überden dein Chatprogramm kommuniziert.

F.W. 5. Jun 2004 13:21

Re: IP Adresse von einem Rechner im INet finden
 
All right!

F.W. 5. Jun 2004 21:25

Re: IP Adresse von einem Rechner im INet finden
 
Ich hab das Prog soweit fertig, dass es die Grundfunktionen erfüllt! Hier ist sind die Stücken aus dem Quellcode, die zur Übertragung von Daten wichtig sind:
Delphi-Quellcode:
procedure TMain.SendBtnClick(Sender: TObject);
begin
 try
   TCPClient.Connect(5);
   TCPClient.WriteLn(BN+': '+MsgEdit.Text);
   WriteMsg(BN+': '+MsgEdit.Text);//BN = Benutzername
   MsgEdit.Clear;
 finally
   TCPClient.Disconnect;
 end;
end;

procedure TMain.TCPServerExecute(AThread: TIdPeerThread);
var
  FS: TFileStream;
  SizeOfIncomingStream: integer;
  S, Fromuser, NameofFile, SizeofStream: String;
begin
 SDia.FilterIndex := 1;
 SDia.DefaultExt := '';
 with AThread.Connection do begin
  try
   S := Readln('', 5);

   if not (Pos('#@#START', S) = 1) then begin
      WriteMsg(S);//WriteMsg -> zum formatierten Hinzufügen in die Richeditkomponente
   end;

   if (Pos('#@#START', S) = 1) then begin
      WriteLog('Empfange Datei!');(*WriteLog-> zum formatierten Hinzufügen von Logbuchnachrichten (auch in die selbe Richedit)*)
      FromUser := CopyFT(S, Pos('|', S)+1, Length(S));
      Write('Sender: '+Fromuser);
      NameofFile := Readln('', 5);
      WriteLog('Dateiname: '+NameofFile);
      SizeofStream := Readln('', 5);
      WriteLog('Größe: '+SizeofStream);
      if MessageBox(Application.Handle, PChar(FromUser+' schickt ihnen die Datei "'+NameofFile+'", die '+SizeofStream+' groß ist.'+#13#10+#13#10+'Wollen sie sie annehmen?'), 'Frage', MB_YESNO) = IDYes then begin
         SDia.FileName := ExtractFileName(NameofFile);//SDia und ODia -> Save/OpenDialog
         if SDia.Execute then begin
            try
              Fs := TFileStream.Create(SDia.Filename, fmCreate or fmShareExclusive);
              SizeOfIncomingStream := ReadInteger;
              WriteLog('Datei wird runtergeladen...');
              ReadStream(fs, SizeOfIncomingStream);
              WriteLog('Transfer erfolgreich abgeschlossen!');
              WriteLog('Datei wurde unter "'+SDia.FileName+'" gespeichert!');
            finally
              Fs.Free;
            end;
         end;
      end;  
   end;
  finally
   Disconnect;
  end;
 end;
end;

procedure TMain.SendFileBtnClick(Sender: TObject);
var
  FS: TFileStream;
begin
 if not ODia.Execute then Exit;

 with TCPClient do begin
   FS := TFileStream.Create(ODia.FileName, fmOpenRead or fmShareDenyWrite);
   if MessageDlg('Folgende Datei möchten sie verschicken:'+#13#10#13#10+
                 'Dateiname: "'+ODia.FileName+'"'+#13#10+
                 'Größe: '+MakeSize(FS.Size)+#13#10#13#10+
                 'Möchten sie sie an "'+TCPClient.Host+'" senden?', mtConfirmation, [mbYes, mbNo], 0) = mrNo then Exit;
     Connect;
   try
       OpenWriteBuffer;
     try
       WriteLog('Übertrage Dateiinfos...');
       WriteLn('#@#START|'+BN);
       Writeln(ODia.FileName);
       Writeln(MakeSize(FS.Size));
       WriteLog('Dateitransfer beginnt...');
       WriteStream(fs, true, true, 0);
       CloseWriteBuffer;
       WriteLog('Dateitransfer beendet');
     except
       CancelWriteBuffer;
     raise;
     end;
   finally
     Disconnect;
     FS.Free;
   end;
 end;
end;

function TMain.MakeSize(ASize: Integer): String;//Zum Anzeigen der Größe in einer geeigneten Einheit
var
 I: integer;
 Size2: Real;
 Einheit: String;
begin
 Einheit := 'Bytes';
 Size2 := ASize;
 if Size2 > 1024 then begin
    Size2 := Runde(ASize/1024, 2);
    Einheit := 'KB';
 end;
 if Size2 > 1024 then begin
    Size2 := Runde(Size2/1024, 2);
    Einheit := 'MB';
 end;
 if Size2 > 1024 then begin
    Size2 := Runde(Size2/1024, 2);
    Einheit := 'GB';
 end;

 Result := FloatToStr(Size2)+' '+Einheit;
end;
Das Nachrichten senden funtzt einwandfrei! Aber das Dateiensenden funtzt nicht, manchmal gehts, manchmal nicht.(Habs im LAN probiert) Wenn ich mal keine Textdatei, sondern eine wavdatei verschicke, ist sie Nachher ein bisschen kleiner und man hört nurnoch die Hälfte! Irgendwas scheint falsch zu sein! Ich weiß nicht was da ist!
Manchmal wird zwar irgendwas versendet (beim Dateiversenden), aber es kommt weder eine Botschaft an, noch die Datei!

F.W. 12. Jul 2004 18:23

Re: IP Adresse von einem Rechner im INet finden
 
@PhaTTy: Arbeite gerade mit was ähnlichen, was müsste ich dort jetzt wählen, dynamisch oder statisch? Und wie geht's dann weiter?
Mein Kumpel sollte seine IP hinschicken können, bei ihm ist nichts zu beachten.
Und ich muss meine hinschicken, allerdings ist bei mir noch n Router im Netzwerk, dahinter zwei Rechner, die ich gern beide mit einspannen würde.

Also brauche ich doch sicher 3 dynamische/statische ...?

Danke schonmal!


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

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