喫茶XRAYトップページ

[スレッド全体
]

[6506] ブロードキャスト返信 削除
2012/11/13 (火) 18:34:40 Syake
めっきり寒くなりました・・・。

TIdUDPServerを使ってブロードキャストしました。

//--------------------------------------------------------

procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Clear;
  IdUDPServer1.DefaultPort := 12345; // 適当なポート
  IdUDPServer1.BroadcastEnabled := True;
  IdUDPServer1.Active := True;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  ArrByte :TArray<Byte>;
begin
  ArrByte := TEncoding.Unicode.GetBytes('あいう');
  IdUDPServer1.Broadcast(ArrByte,12345);
end;

procedure TForm1.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread; AData: array of Byte; ABinding: TIdSocketHandle);
var
  ArrByte :TBytes;
  i,nLen :Integer;
  StrTxt :String;
begin
  //AData をTBytesに変換する方法がわからんから適当(^_^;)
  nLen := Length(AData);
  if nLen > 0 then
  begin
    SetLength(ArrByte,nLen);
    for i := 0 to nLen-1 do ArrByte[i] := AData[i];
    StrTxt := TEncoding.Unicode.GetString(ArrByte);
    Memo1.Lines.Add(FormatDateTime('hh:nn:ss',Time) + ' ' + StrTxt);
  end;
end;

//----------------------------------------------------------------

と、まあ適当なプログラムでさてどうだ。

PCは <A> <B> <C> の3台でお試し・・・

<C>でBroadcast <A><B><C>全てOnUDPRead発生

<B>でBroadcast  <A><B><C>全てOnUDPRead発生

<A>でBroadcast  <A>のみOnUDPRead発生 <B><C>は沈黙...

<A> Win7 SP1
<B> Win7
<C> WinXP SP3

う〜む、何でじゃ!?

今日はこればっかし。
私の心も寒くなりました。(;_;)




[6507] ブロードキャスト返信 削除
2012/11/14 (水) 08:03:46 Syake
更に台数を増やして検証しました。

<A>Win7 SP1
<B>Win7
<C>WinXPSP3
<D>Win7
<E>Win7 SP1

結果 <A>または<E>でBroadcastした場合、自身以外の他の
PCでOnUDPReadは発生しない。
<A><E>以外でBroadcastした場合、<A><E>を含め全てのPCで
OnUDPReadは発生している。

<A>Win7 SP1 内で別々に作成したプログラムを起動して互い
に通信できるかを検証した結果は問題なく行えている。


と言ったところです。
詰まるところ、Win7SP1の場合、信号!?がPC外に伝わって
いない様です。

やはり Win7 SP1 辺りが臭うような。
 
 

[6508] 何事も諦めが肝腎じゃ返信 削除
2012/11/14 (水) 09:58:30 Syake
SendBufferは問題なく送受信する事は可能ですが、Broadcastが
環境に依って正常に行えていない以上、挫折です。

何か別な事を考えるしかないようです(;_;)



[6509] 何事も諦めんで良かった返信 削除
2012/11/14 (水) 15:04:38 Syake
BroadcastでIPアドレスを省略した場合、リミテッド・
ブロードキャスト・アドレス(255.255.255.255)と称
するらしいが、これを指定して送信されている。

で、これをディレクティッド・ブロードキャスト・ア
ドレスと称するらしいが、ネットワークアドレスは
そのままで、ホストアドレスを全て1Bitにしたアドレス
(XXX.XXX.XXX.255)を指定することで、全てのPCで受信
することができた。

何故、255.255.255.255でダメなのかは今もってわから
ないけど、取り敢ずいろいろ勉強になったです。




[6511] 全然ちゃうじゃん返信 削除
2012/11/14 (水) 17:18:38 Syake
OSは関係なかった。
たまたまだった。

<A><E>にはVirtalBoxがインストールされていて、それに
使用する仮想ネットワークアダプタがOS上に設定されている
のだが、ブロードキャストした時に使用されるIPアドレスが
自ローカル接続のアドレスでは無く、この仮想ネットワーク
アドレスが送信元になっていた。
その為、他のPCで受信されない!?

「一つのネットワークセグメント内」とは、ネットワーク部
が同一で且つ、物理的に同じイーサーネット接続内の事なの
でしょうか。
ならば、これが原因なのでしょう。

で、何で??


[6513] やっと解決返信 削除
2012/11/14 (水) 17:49:30 Syake
やはりVirtualBoxをインストールした際の仮想ネットワークアダプタ
が邪魔していました。

解決方法は以下2つのいずれか。

1)仮想ネットワークを削除する。

2)送信はUDPClientを使って行い、その際に明示的に自アドレスを
  指定する。
   IdUDPClient1.BoundIP := XXXX.XXXX.XXXX.XXX;

まあ2)の方が確実ですね。

目的が異なるので、この場合はディレクティッド・ブロードキャスト
・アドレスは基本使用しない方が...。


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82