Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi UDP Senden/Empfangen (https://www.delphipraxis.net/84983-udp-senden-empfangen.html)

dk3wx 24. Jan 2007 10:09


UDP Senden/Empfangen
 
Hallo,

ich habe ein Gerät im LAN das nur UDP empfangen und senden kann. Mit Turbo Delphi 2006 und der udpSocket Komponente versuche udp Pakete zu empfangen.

Das Senden klappt. Ich kann mit "ethereal" sehen wie die Daten an das Gerät gesendet werden und auch die richtige Antwort kommt an. Nur leider wird sie nicht an mein Programm weitergeleitet.

In dem Beispiel will ich nur sehen das Daten überhaupt ankommen, aber OnReceive meldet nichts und ich sehe an der Netzwerkschnittstelle ein ICMP was auf einen unbekannten Empfänger schliessen lässt. Mir fehlt also im Empfangsfall die Verbinding vom IP Stack zu meinem Programm.

Hat jemand eine Idee?


[/delphi]unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Sockets;

type
TForm1 = class(TForm)
UdpSocket1: TUdpSocket;
Button1: TButton;
Memo1: TMemo;
procedure UdpSocket1Receive(Sender: TObject; Buf: PAnsiChar;
var DataLen: Integer);
procedure Button1Click(Sender: TObject);
procedure UdpSocket1Connect(Sender: TObject);
procedure UdpSocket1Disconnect(Sender: TObject);
procedure UdpSocket1Error(Sender: TObject; SocketError: Integer);

private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;

var
Form1: TForm1;
DataLen :Integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var buffer : array[0..14] of Byte;

begin
Form1.Memo1.Lines.Add('UDP Local: '+ udpSocket1.LocalHostAddr);
Form1.Memo1.Lines.Add('UDP Remote: '+ udpSocket1.RemoteHost);

udpSocket1.Connect;
buffer[0]:=$80;
buffer[1]:=$02;
buffer[2]:=$01;
buffer[3]:=$00;
buffer[4]:=$81;
buffer[5]:=$04;
buffer[6]:=$C0;
buffer[7]:=$A8;
buffer[8]:=$73;
buffer[9]:=$02;
buffer[10]:=$82;
buffer[11]:=$02;
buffer[12]:=$12;
buffer[13]:=$86;
buffer[14]:=$00;

udpSocket1.Sendbuf(buffer,14);
Sleep(1000);

Form1.Memo1.Lines.Add('UDP Receive : '+ inttostr(udpSocket1.BytesReceived));
udpSocket1.Disconnect;
end;


procedure TForm1.UdpSocket1Connect(Sender: TObject);
begin
Form1.Memo1.Lines.Add('connect');
end;

procedure TForm1.UdpSocket1Disconnect(Sender: TObject);
begin
Form1.Memo1.Lines.Add('disconnect');
end;

procedure TForm1.UdpSocket1Error(Sender: TObject; SocketError: Integer);
begin
Form1.Memo1.Lines.Add('UDP Error : '+ inttostr(SocketError));
end;

procedure TForm1.UdpSocket1Receive(Sender: TObject; Buf: PAnsiChar;
var DataLen: Integer);

begin
//Form1.UdpSocket1.ReceiveBuf(puffer,DataLen);
Form1.Memo1.Lines.Add('UDP Rec : '+ inttostr(DataLen)+ ' Byte');
end;


end.[/delphi]

tnx Bernd


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:35 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