AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Probleme beim Empfangen von UDP-Paketen

Probleme beim Empfangen von UDP-Paketen

Ein Thema von heltef · begonnen am 5. Mai 2015 · letzter Beitrag vom 12. Mai 2015
Antwort Antwort
Seite 1 von 2  1 2   
MichaelT

Registriert seit: 14. Sep 2005
Ort: 4020 Linz
558 Beiträge
 
Delphi 10.3 Rio
 
#1

AW: Probleme beim Empfangen von UDP-Paketen

  Alt 6. Mai 2015, 16:59
Ferndiagnosen sind schwierig... Das ist schon ein wenig alt.
https://ask.wireshark.org/questions/...with-wireshark

Was steht in den Packeln drinnen?




Guten Abend zusammen,

ich habe folgendes Problem...
Delphi empfängt nur die Daten Udp Pakete, wenn Wireshark geöffnet ist. ...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.342 Beiträge
 
Delphi 12 Athens
 
#2

AW: Probleme beim Empfangen von UDP-Paketen

  Alt 6. Mai 2015, 17:14
IdUDPServer1.OnUDPRead wird doch bestimmt im Thread der er Connection ausgeführt, was nicht der HauptThread ist.
Die VCL ist nicht threadsicher und man darf "niemals" unsynchronisiert außerhalb des Hauptthreads drauf zugreifen.

Wireshark häckt sich böse in die Connections rein, verstellt hier und da etwas und wer weiß was dadurch alles verändert wird, welches hier eine Auswirkung zeigt.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 6. Mai 2015 um 17:17 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.154 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Probleme beim Empfangen von UDP-Paketen

  Alt 9. Mai 2015, 13:40
IdUDPServer1.OnUDPRead wird doch bestimmt im Thread der er Connection ausgeführt, was nicht der HauptThread ist.
"wird doch bestimmt?"

emmm... nööö

Zitat von ..\Source\Indy10\Core\IdUDPServer.pas:
Delphi-Quellcode:
        // and only synchronize the OnUDPRead event handler so that descendants
        // do not need to be synchronized unnecessarily. Probably just have
        // TIdUDPServer.DoUDPRead() use TIdSync when ThreadedEvent is false...
        if FServer.ThreadedEvent then begin
          UDPRead;
        end else begin
          Synchronize(UDPRead);
        end;
Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Probleme beim Empfangen von UDP-Paketen

  Alt 9. Mai 2015, 13:50
Schön dass man gar nicht hoffen/glauben muss ob da was in welchem Thread-Kontext läuft, mann kann es einfach abfragen:
Delphi-Quellcode:
if TThread.Current.ThreadId = MainThreadID then
  // ich im MainThread
else
  // ich NICHT im MainThread
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.010 Beiträge
 
Delphi 2009 Professional
 
#5

AW: Probleme beim Empfangen von UDP-Paketen

  Alt 9. Mai 2015, 14:53
Schön dass man gar nicht hoffen/glauben muss ob da was in welchem Thread-Kontext läuft, mann kann es einfach abfragen:
Delphi-Quellcode:
if TThread.Current.ThreadId = MainThreadID then
  // ich im MainThread
else
  // ich NICHT im MainThread
Für Anwender von Delphi 2009: das kompiliert zwar, ist aber erst in einer späteren Version (Build 14.0.3455.22156) brauchbar: http://qc.codegear.com/wc/qcmain.aspx?d=67726 (darin ist auch ein Workaround enthalten)

Siehe auch: Delphi TThread.CurrentThread and EAccessViolation - Is This a Bug or My Incompetence..?
Michael Justin
  Mit Zitat antworten Zitat
heltef

Registriert seit: 28. Sep 2012
7 Beiträge
 
#6

AW: Probleme beim Empfangen von UDP-Paketen

  Alt 9. Mai 2015, 18:34
Hallöchen zusammen,

ich habe es mal gemacht wie Captnemo es vorgeschlagen hatte.. Ich hab ein Windows Programm geschrieben und siehe da... Es funktioniert alles ohne Wireshark.

So ist Delphi ausgeschlossen und muss somit wohl am Mikrocontroller liegen. Ich werde jetzt mal mit Wireshark die Pakete vergleichen und mal sehen wo sie sich unterscheiden.

Dankeschön für eure Hilfe. Noch ein schönes Restwochenende
Fabi
  Mit Zitat antworten Zitat
pertzschc

Registriert seit: 29. Jul 2005
Ort: Leipzig
316 Beiträge
 
Delphi 12 Athens
 
#7

AW: Probleme beim Empfangen von UDP-Paketen

  Alt 11. Mai 2015, 10:38
Ich werfe mal noch die Vermutung in den Raum, dass Dein Microcontroller die Pakete an die falsche IP-Adresse sendet. In Deinem Coding war zumindest eine Destination "hardgecoded".
byte ipDestination[] = {192, 168, 2, 99}; //Ziel Ip Des Paketes Wenn das so ist, dann könnte der Rechner mit dem Delphiprogramm ein andere Adresse als die obige zugewiesen bekommen und empfängt dann natürlich nichts. Soweit funktioniert es dann korrekt, nur dass Du Dein Ziel vom Mikrocontroller aus gesehen nicht erreichst.

Was dann Wireshark beim Starten auf dem Rechner macht ist, den Empfangsmodus auf den Promiscuous Mode umzustellen, um alle Pakete des Netzwerkes zu empfangen. Damit landen dann auch alle nicht richtig adressierten Pakete auf dem Rechner.

Grüße, Christoph
  Mit Zitat antworten Zitat
heltef

Registriert seit: 28. Sep 2012
7 Beiträge
 
#8

AW: Probleme beim Empfangen von UDP-Paketen

  Alt 6. Mai 2015, 17:27
Ich hab hier mal ein Screenshot von einem Paket in Wireshark
Wire1.jpg

Wire2.jpg


@himitsu
Ich habe in Delphi mit Threads noch nie gearbeitet. Könntest du mir zeigen wie ich es korrekt lösen würde? Danke

Geändert von heltef ( 6. Mai 2015 um 17:29 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#9

AW: Probleme beim Empfangen von UDP-Paketen

  Alt 6. Mai 2015, 21:09
Naja, wenn's auf einem jungfräulichen Rechner ohne Wireshark auch nicht geht, wird's wohl am Source liegen. Poste doch mal den kompletten Source.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
heltef

Registriert seit: 28. Sep 2012
7 Beiträge
 
#10

AW: Probleme beim Empfangen von UDP-Paketen

  Alt 6. Mai 2015, 21:25
Hier ist der Komplette Code... Viel ist da zwar nicht drin, aber vielleicht habe ich auch was vergessen

Code:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, IdUDPServer, IdGlobal, IdSocketHandle,
  IdComponent, Vcl.StdCtrls, IdBaseComponent, IdUDPBase;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    IdUDPServer1: TIdUDPServer;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure IdUDPServer1Status(ASender: TObject; const AStatus: TIdStatus;
      const AStatusText: string);
    procedure IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
      const AData: TIdBytes; ABinding: TIdSocketHandle);
    procedure FormDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  IdUDPServer1.DefaultPort:=50001;
  IdUDPServer1.Active:=true;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  IdUDPServer1.Active:=false;
end;

procedure TForm1.IdUDPServer1Status(ASender: TObject; const AStatus: TIdStatus;
  const AStatusText: string);
begin
  Memo1.Lines.Add('Status'+AStatusText);
end;

procedure TForm1.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
  const AData: TIdBytes; ABinding: TIdSocketHandle);
var
  sText:String;
begin
  sText := BytesToString(AData);
  Memo1.Lines.Add(sText);
end;

end.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 10:23 Uhr.
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