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