TIdUDPServer の OnUDPRead イベントを使用して、作成した IdUDPClient クライアントから送信されたブロードキャスト データを読み取ろうとすると問題が発生します。次の質問に示されている例を使用してみましたが、役に立ちませんでした。
Delphiでブロードキャストメッセージを送信するにはどうすればよいですか
指定したポートに TIdUDPServer をバインドできます。
procedure TForm1.Button1Click(Sender: TObject);
begin
IdUDPServer1.BroadcastEnabled := True;
IdUDPServer1.DefaultPort := StrToInt(edit2.Text);
IdUDPServer1.Bindings.Add.IP := '0.0.0.0';
//IdUDPServer1.ThreadedEvent:=True;
IdUDPServer1.Active := True;
end;
IdUDPServer1UDPRead が正常にトリガーされ、UDP サーバーが動作していることを示していますが、この行で例外が発生します -> DataStringStream.CopyFrom(AData, AData.Size);
例外: モジュール 'IndyUDPReceiver.exe' のアドレス 004BA415 でアクセス違反が発生しました。アドレス 74736574 の読み取り
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject;
AData: TStream; ABinding: TIdSocketHandle);
var
DataStringStream: TStringStream;
msg: string;
begin
try
DataStringStream := TStringStream.Create('');
try
DataStringStream.CopyFrom(AData, AData.Size);
msg := DataStringStream.DataString;
Memo1.Lines.Add(msg);
finally
DataStringStream.Free;
end;
except
on E: Exception do
begin
Memo1.Lines.Add('Exception:' + E.Message);
DataStringStream.Free;
end;
end;
end;
完全なクライアントとサーバーを次の URL にアップロードしました: http://www.2shared.com/file/5SRweGIa/Indy_UDP.html
ポインタに感謝します。:)