Autor Beitrag
Mortal-Shadow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 110



BeitragVerfasst: Di 11.11.08 18:09 
Hi,

ich wühle mich grade durch Narses Tutorial über seine Udp-Komponente, wobei mir dabei folgendes schleierhaft ist:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
// Datenpaket eingetroffen; lesen und bearbeiten
procedure TForm1.UdpSockUtil1Receive(Sender: TObject);
var
vonIP: in_addr;
Data: TStringList; // zum Abspalten der Datenpakete
Current: TCmdToken; // aktuelles Kommando
begin
Data := TStringList.Create;
try
Data.Text := UdpSockUtil1.ReceiveText(vonIP); // Daten lesen
if (Data.Count > 1then // min. 2 Datenpakete müssen da sein
if (Data.Strings[0] = APP_ID) then begin // von einem NarsesUdpLanChat?
Current := GetCmdToken(UpperCase(Data.Strings[1])); // Befehl bestimmen
if (Data.Count >= (Syntax[Current].ArgCount +1)) then // reichen die Argumente?
Execute(Current,Data,vonIP); // ja, dann bearbeiten
end;
finally
Data.Free;
end;
end;


Und zwar die Variable "vonIP".
So wie ich das sehe wird sie ja nirgends zugewiesen - woher weis das Programm also welche Ip-Adresse es ist?
Oder liegt das an in_addr, das dieser Typus automatisch abgefragt wird?
Für eine Aufklärung wäre ich dankbar.

Gruß,
MS.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 11.11.08 18:18 
user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
// Ereignis: Nachricht eingetroffen
procedure TForm1.UdpSockUtil1Receive(Sender: TObject);
var
  Msg: String;
  vonIP: in_addr; // für diesen Typ:  uses ..., WinSock;  ergänzen!
begin
  // Nachricht einlesen; in vonIP wird die Absender-IP zurückgegeben
  Msg := UdpSockUtil1.ReceiveText(vonIP);
  // Länge der Nachricht, die Nachricht und den Absender anzeigen
  ShowMessage(IntToStr(Length(Msg))+#13+Msg+#13+inet_ntoa(vonIP));
end;
Mortal-Shadow Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 110



BeitragVerfasst: Di 11.11.08 18:33 
Danke für die schnelle Antwort, aber hast du ein anderes Tutorial wie ich? (Ich habe 1.01)
Ich habe nämlich das komplette Receive-Event per paste+copy gepostet.
Weiterhin verstehe ich deine Antwort ebenfalls nicht ganz:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.UdpSockUtil1Receive(Sender: TObject);
var
  Msg: String;
  vonIP: in_addr; 
begin
  Msg := UdpSockUtil1.ReceiveText(vonIP);  // die Funktion ist ja in Narses Unit eingebaut und gibt mir das Empfangene als String zurück.
                                           //Aber ebenfalls hier die Frage - woher weis das Programm zu dem Zeitpunkt welchen 
                                           //Wert "vonIP" hat? So wie ich das sehe wurde er hier ja nirgends zugewiesen oder übergeben...
  ShowMessage(IntToStr(Length(Msg))+#13+Msg+#13+inet_ntoa(vonIP));
end;
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 11.11.08 19:29 
In der Funktion ReceiveText wird das in die angegebene Stringvariable geschrieben ;-). Es ist ein variabler Parameter, d.h. der kann in der Funktion verändert werden, an den du die Variable als Parameter übergibst.
Deshalb kannst du da auch nicht einfach '192.0.0.1' oder so angeben, denn das wäre eine unveränderbare (im Code angegebene) Konstante.

Woher das Zitat stammt? Klick einfach auf den kleinen Pfeil oben neben "user profile iconNarses hat folgendes geschrieben" ;-).
Mortal-Shadow Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 110



BeitragVerfasst: Di 11.11.08 19:36 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
In der Funktion ReceiveText wird das in die angegebene Stringvariable geschrieben .


Ich vermute mal du hast meine Frage falsch verstanden.
Beim Aufruf der Funktion übergibt man ja die Variable "vonIP".
Mich interessiert lediglich wo der Wert der Variable "vonIp" selbiger zugewiesen wird.
Zum veranschaulichen:
ausblenden Delphi-Quelltext
1:
vonIP :=  irgendetwas;					

So etwas, oder etwas ähnliches verisse ich nämlich komplett - habe es nirgendwo gesehen.
Wo wird der Variable also ihr Wert zugewiesen?
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Di 11.11.08 19:38 
In der Funktion, d.h. die Variable ist erst nachher definiert.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 11.11.08 19:43 
Vielleicht mal ein kleines Beispiel:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.ButtonXClick(Sender: TObject);

  function Test(var X: String): String;
  begin
    X := 'Ich war ein Funktionsparameter';
    Result := 'Ich war ein Funktionsergebnis';
  end;

var
  MyString, MyResult: String;
begin
  MyResult := Test(MyString);
  ShowMessage('MyResult = ' + MyResult + #13#10 + 'MyString = ' + MyString);
end;
Ich hoffe ich habe mich jetzt nirgends vertippt.
Mortal-Shadow Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 110



BeitragVerfasst: Di 11.11.08 19:54 
Ich glaube mir ist jetzt ein Licht aufgegangen, nachdem ich dein Beispiel mal kompiliert hab.
Noch mal zusammenfassen ob ichs begriffen hab:

Dadurch das in der Funktion vor dem Übergabe-Parameter ein "var" steht, wird seine Adresse übergeben.
Dadurch wird er in der Funktion beschrieben.

Stimmt das so?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 11.11.08 20:05 
Richtig ;-).

Wobei bei Objekten immer eine Referenz auf das Objekt übergeben wird, auch wenn var nicht angegeben ist.