私のネットワークにはuPNPデバイスがほとんどありません。私はネットワークにM-SEARCH要求を送信しようとしており、そこからいくつかの応答を受け取ることを期待しています。これは私が試しているものです:IdUDPClientを使用してM-SEARCH要求を送信できますか?
var sIP, sOut: string;
iPort: Word;
S: TStringBuilder;
begin
S := TStringBuilder.Create;
try
S.Append('M-SEARCH * HTTP/1.1').AppendLine
.Append('HOST: 239.255.255.250:1900').AppendLine
.Append('MAN: "ssdp:discover"').AppendLine
.Append('MX: 10').AppendLine
.Append('ST: ssdp:all').AppendLine;
IdUDPClient1.ReceiveTimeout := 3000;
IdUDPClient1.Broadcast(S.ToString, 1900, '239.255.255.250');
sOut := IdUDPClient1.ReceiveString(sIP, iPort);
Memo1.Lines.Add(sIP);
Memo1.Lines.Add(IntToStr(iPort));
Memo1.Lines.Add(sOut);
finally
S.Free;
end;
end;
私はUDPクライアントから何も受け取りません。私はWiresharkを使ってネットワークトラフィックを監視し、私のホストからのメッセージは送信されませんでした。
アイデア?ありがとうございました。文字列ビルダの終わりに二回
uses
System.SysUtils, IdUDPClient, IdStack;
var S: TStringBuilder;
U: TIdUDPClient;
iPeerPort: Word;
sPeerIP, sResponse: string;
begin
U := TIdUDPClient.Create(nil);
S := TStringBuilder.Create;
try
S.Append('M-SEARCH * HTTP/1.1').AppendLine
.Append('HOST: 239.255.255.250:1900').AppendLine
.Append('MAN: "ssdp:discover"').AppendLine
.Append('MX: 3').AppendLine
.Append('ST: ssdp:all').AppendLine
.AppendLine;
U.BoundIP := GStack.LocalAddress;
U.Send('239.255.255.250', 1900, S.ToString);
U.ReceiveTimeout := 1000;
repeat
sResponse := U.ReceiveString(sPeerIP, iPeerPort);
if iPeerPort <> 0 then begin
WriteLn(Format('%s:%d', [sPeerIP, iPeerPort]));
WriteLn(sResponse);
end;
until iPeerPort = 0;
ReadLn;
finally
S.Free;
U.Free;
end;
end.
私は新しいAppendLineを追加()をstringbuilderオブジェクトに追加しましたが、何も応答がありませんでした。 WireShark経由でトラフィックを監視しているときに、私のホストから送信されたリクエストに気付かなかった。 –
'239.255.255.250'はあなたのLANの正しいブロードキャストIPですか?あなたのクライアントのPCにはどのようなローカルIPとサブネットが割り当てられていますか? –
239.255.255.255にブロードキャストすると、ホストから送信されたトラフィックが確認できます。しかし、239.255.255.250にブロードキャストされ、トラフィックは検出されなかった。 –