AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi IdUDPServer.UDPRead wird nicht aufgerufen
Thema durchsuchen
Ansicht
Themen-Optionen

IdUDPServer.UDPRead wird nicht aufgerufen

Ein Thema von RobertP · begonnen am 30. Aug 2007 · letzter Beitrag vom 31. Aug 2007
Antwort Antwort
RobertP

Registriert seit: 19. Aug 2006
181 Beiträge
 
Turbo Delphi für Win32
 
#1

IdUDPServer.UDPRead wird nicht aufgerufen

  Alt 30. Aug 2007, 15:32
Hallo,
ich hab ein kleines Problem mit dem UDP Server von den Indys in einem Konsolenprogramm:
UDPRead wird nicht aufgerufen. Der Broadcast funktioniert und die Antwort kommt auch (mit Wireshark überprüft). udp.ReceiveString funktioniert auch.

Was mach ich falsch?

Delphi-Quellcode:
type
  TUDPRead = class
    procedure UDPRead(Sender: TObject; AData: TBytes;
      ABinding: TIdSocketHandle);
  end;

var
  readUDP : TUDPRead;
  udp : TIdUDPServer;

procedure TUDPRead.UDPRead(Sender: TObject; AData: TBytes; ABinding: TIdSocketHandle);
begin
  Writeln('read');
end;

begin
  udp := TIdUDPServer.Create(nil);
  udp.OnUDPRead := readUDP.UDPRead;
  udp.Broadcast(cast, 1900);
  ReadLn;
end.
Robert
Grüße,
Robert
Meine Website: RPworld.de
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: IdUDPServer.UDPRead wird nicht aufgerufen

  Alt 30. Aug 2007, 15:39
1. readUDP wurde nicht instanziert. Dies verursacht Zugriffsverletzungen, wenn du in der Methode UDPRead auf Felder
zugreifst.
2. Zumindest die Windows-Sockets arbeiten mit Nachrichten, sodass du ohne Nachrichtenschleife keine Chance hast. Es
kann sein, dass es bei den Indys ebenso ist.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#3

Re: IdUDPServer.UDPRead wird nicht aufgerufen

  Alt 30. Aug 2007, 15:43
Deaktiviere mal den SSDP Dienst und falls du hast den WindowsMessenger und probier ob es dann läuft.

Gruß Richard
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
RobertP

Registriert seit: 19. Aug 2006
181 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: IdUDPServer.UDPRead wird nicht aufgerufen

  Alt 30. Aug 2007, 15:49
Zitat von richard_boderich:
Deaktiviere mal den SSDP Dienst und falls du hast den WindowsMessenger und probier ob es dann läuft.
Beides deaktiviert / deinstalliert.

Mit Nachrichtenschleife hab ichs auch schon probiert, ändert nix:
Delphi-Quellcode:
repeat
    while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do
    begin
     TranslateMessage(Msg);
     DispatchMessage(Msg);
    end;
  until canclose;
Und was meinst du mit instanzieren?

Edit: In ner normalen VCL Anwendung läufts...
Robert
Grüße,
Robert
Meine Website: RPworld.de
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: IdUDPServer.UDPRead wird nicht aufgerufen

  Alt 30. Aug 2007, 16:23
Zitat:
Und was meinst du mit instanzieren?
Nun, wenn "gereadet" werden soll, versucht dein Server, ReadUDP.UDPRead aufzurufen. ReadUDP ist aber nil, weil du nirgends ReadUDP:=TUDPRead.create eingefügt hast. Und deshalb darfst du in der Methode nicht auf Felder zugreifen, weil es sonst eine Zugriffsverletzung gibt. Das ist nur als allgemeiner Hinweis gedacht. Da du nicht auf Felder zugreifst und es auch keine AV gibt, liegt es nicht daran.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: IdUDPServer.UDPRead wird nicht aufgerufen

  Alt 30. Aug 2007, 16:50
Damit der UDP Server eine Antwort empfangen kann, muss ihm eine lokale Portnummer
zugewiesen werden.
Sonst wäre die Portnummer = 0, und das ist nicht zulässig.
Ausserdem muss der Komponente "gesagt" werden, das jetzt der eingestellte Port abgehört werden soll.
Da fehlt ein .Listen oder wie auch immer das Property oder die Methode heisen mag.
Andreas
  Mit Zitat antworten Zitat
RobertP

Registriert seit: 19. Aug 2006
181 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: IdUDPServer.UDPRead wird nicht aufgerufen

  Alt 30. Aug 2007, 18:22
Habs nun so versucht:
Delphi-Quellcode:
udp.Bindings.DefaultPort := 2000;
  socket := TIdSocketHandle.Create(udp.Bindings);
  socket.Listen();
Geht auch net! Fehler: Socket Error # 10038 Socket Operation on non-socket.

Ich versteh allerdings auch net wieso das alles nicht nötig ist wenn ichs mit VCL mach...
Robert
Grüße,
Robert
Meine Website: RPworld.de
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#8

Re: IdUDPServer.UDPRead wird nicht aufgerufen

  Alt 30. Aug 2007, 19:48
lass mich jetzt mal raten, an port 1900 kontest du es nicht binden richtig?
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

Re: IdUDPServer.UDPRead wird nicht aufgerufen

  Alt 31. Aug 2007, 09:46
Delphi-Quellcode:
  udp := TIdUDPServer.Create(nil);
  udp.OnUDPRead := readUDP.UDPRead;
  udp.DefaultPort := 2000; // <===
  udp.Active := True; // <===
  udp.Broadcast(cast, 1900);
Andreas
  Mit Zitat antworten Zitat
RobertP

Registriert seit: 19. Aug 2006
181 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: IdUDPServer.UDPRead wird nicht aufgerufen

  Alt 31. Aug 2007, 12:45
Zitat von richard_boderich:
lass mich jetzt mal raten, an port 1900 kontest du es nicht binden richtig?
Falsch geraten Ich muss es doch an den lokalen Port binden, 1900 ist doch der Remote Port. Oder?

@shmia: Dein Code geht leider auch nicht

Naja egal trotzdem danke euch allen für die Hilfe, ich werds jetzt eben irgendwie mit ReceiveString lösen.
Robert
Grüße,
Robert
Meine Website: RPworld.de
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:46 Uhr.
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