Autor Beitrag
xsus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51

Win 2000, Win XP, Win 7; Ubuntu
Delphi 7, Delphi XE2, C
BeitragVerfasst: Sa 15.11.14 22:34 
Hallo,

ich habe eine Anwendung auf dem PC mit ganz normalen Buttons , hinter denen ja nichts anderes als Prozeduren stehen. Nun hätte ich gern eine Android APP die auch einfach Buttons hat und bei klick die Prozedur des Buttons bzw den Button selbst der Windows Anwendung ausführt. Leider habe ich keine Ahnung wie ich das realisieren kann...ich habe während meiner Recherchen immer mal wieder was von Indy gelesen etc aber schlau werd ich davon nicht...
Gut wäre auch wenn ich das über den Rechnernamen ansteuern kann und nicht über die IP (also es bleibt im eigenen Netzwerk..) da sich die IP Adressen immer ändern..
Wenn wir jemand das Thema näher bringen kann oder sogar codeauszüge bereit stellt, was in den Quellcode der win Anwendung muss und was in die APP ..wäre ich total dankbar :)
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: So 16.11.14 02:46 
Prinzipiell geht das wohl am einfachsten über Sockets (z.B. eben die von Indy). Das heißt:

Du machst in deinem Programm ein UDP-Socket auf und horchst. Deine App schickt über UDP einen Broadcast mit dem Button-Klick (einfachste Variante, du kannst natürlich auch erst den Rechner per UDP suchen und dann per TCP kommunizieren).
Siehe auch
www.entwickler-ecke....p;highlight=tcp+indy
www.entwickler-ecke....N+finden_109283.html

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
xsus Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51

Win 2000, Win XP, Win 7; Ubuntu
Delphi 7, Delphi XE2, C
BeitragVerfasst: Di 18.11.14 21:03 
Zunächst erstmal DANKE!

Ich bin jetzt soweit, dass ich in der PC-Anwendung folgendes habe:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.FormCreate(Sender: TObject);
begin
  tdInit;
  image1.Picture.LoadFromFile(ExtractFilePath(Application.Name)+'background.jpg');
  idudpserver1.DefaultPort:=10025;
  idudpserver1.Active:=true;
end;

procedure TForm1.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
  const AData: TIdBytes; ABinding: TIdSocketHandle);
var rectext:string;
begin
RecText:=Copy(BytesToString(Adata), 0, length(Adata));
application.MessageBox(Pwidechar(rectext),'Test Broadcast');
end;


Und in der App:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.Button1Click(Sender: TObject);
begin
idudpclient1.BroadcastEnabled:=true;
idudpclient1.Broadcast('Hallo',10025);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
idudpclient1.Port:=10025;
idudpclient1.Active:=true;
end;


Ganz verstehen tue ich alles noch nicht, aber ich bekomme schon einmal ne Meldung angezeigt.
Meine noch offenen Fragen:
1.) Ist das "idudpclient1.BroadcastEnabled:=true;" im Button richtig und wird jedes Mal mit ausgeführt oder kommt das eher in den FormCreate Teil ?

2.) Wie würde ich jetzt vorgehen, um tatsächlich eine Procedur auszuführen? Auf eine String warten, diesen vergleichen und daran zu entscheiden welche Procedur käme mir da in den Kopf, aber das ist irgendwie doof oder? Muss doch auch besser gehen..

Besten Gruß und THX
xsus
glotzer
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 393
Erhaltene Danke: 49

Win 7
Lazarus
BeitragVerfasst: Di 18.11.14 21:28 
Statt String einen Integer nehmen, dass ist ziemlich genau das Vorgehen. Strings übers Netzwerk sind nicht schön...

Mit Little- und Big-Endian aufpassen, ich weiß jetzt grad nicht ob die Indys das schon machen, am besten mal Google/Wikipedia fragen.

_________________
ja, ich schreibe grundsätzlich alles klein und meine rechtschreibfehler sind absicht
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 18.11.14 21:30 
Wenn auch Delphi XE6 oder XE7 in Frage kommt:
Da gibt es dafür sehr bequem App-Tethering.
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Mi 19.11.14 11:12 
user profile iconglotzer hat folgendes geschrieben Zum zitierten Posting springen:
Strings übers Netzwerk sind nicht schön... Mit Little- und Big-Endian aufpassen

Die Kommunikation von Sockets hat den wesentlichen Vorteil, dass genau dies berücksichtigt wird. Leider hab ich auf die schnelle keinen Beweis dafür gefunden, aber Wikipedia bestätigt meine Vermutung. Alles andere würde mich auch sehr wundern.
Die Indy-Komponenten wandeln die "network byte order" dann in die Delphi-übliche Reihenfolge.
Da die Größe der Pakete im Wesentlichen auch egal ist, spricht meiner Meinung nach erstmal nichts gegen Strings.

Laut der Indy-Hilfe kann der Broadcast-Befehl das Attribut BroadcastEnabled verändern...am besten du lässt es, wie es momentan ist :)

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)