IdUDPServer透过哪个网卡发送数据

IdUDPServer透过哪个网卡发送数据

 
www.MyException.Cn   发布于:2013-02-19 11:11:40   浏览:56次
 
IdUDPServer通过哪个网卡发送数据? 跪求高人帮忙,   请问:TIdUDPServer组件SendBuffer发送数据, 如果机子上有多个网卡,TIdUDPServer默认是哪个网卡发送出去的?(未设置TIdUDPServer.Bindings属性,TIdUDPServer.defaultPort=4002)     我跟踪了Delphi7的源码 SendBuffer用的是Binding属性的SendTo方法,   Binding属性是GetBinding(TIdUDPServer覆盖)方法实现   GetBinding方法中FCurrentBinding := Bindings[0];   哪位大侠可以告诉我有多个网卡时,未设置TIdUDPServer.Bindings属性,Bindings[0]会是哪个网卡?   同时请问未设置TIdUDPServer.Bindings属性TIdUDPServer是监听所有网卡的4002端口吗?
附Delphi7部分源码: procedure TIdUDPBase.SendBuffer(AHost: string; const APort: Integer; var ABuffer; const AByteCount: integer); begin   AHost := GStack.ResolveHost(AHost);   Binding.SendTo(AHost, APort, ABuffer, AByteCount); end; property Binding: TIdSocketHandle read GetBinding;
function TIdUDPServer.GetBinding: TIdSocketHandle; var   i: integer; begin   if not Assigned(FCurrentBinding) then   begin     if Bindings.Count < 1 then begin       Bindings.Add;     end;     for i := 0 to Bindings.Count - 1 do begin       Bindings[i].AllocateSocket(Id_SOCK_DGRAM);       Bindings[i].Bind;     end;     FCurrentBinding := Bindings[0];     FListenerThread := TIdUDPListenerThread.Create(BufferSize, Self);     FListenerThread.Start;     BroadcastEnabledChanged;   end;   Result := FCurrentBinding; end;             
 
------解决方案-------------------- 系统根据你发送的目的地址选择用哪块网卡,不过你可以通过bind指定地址,这有很多socket例子,你看看bind的用法: http://download.csdn.net/detail/geoff08zhang/4571358 ------解决方案-------------------- 简单的回答: 客户端连接在哪张网卡就用那张发。因为ip 0.0.0.0是倾听所有。 如果 ip 是指定的, 那么哪张网卡的ip地址是跟你指定的ip地址是一样的, 就是那张网卡发。 例如你的ip是192.168.0.1, 那他绝对不会通过192.168.1.1的地址的网卡发。
posted @ 2014-08-12 11:46  LAOS  阅读(377)  评论(0)    收藏  举报