Delphi中TIdUDPServer用在Com中IdUDPServerUDPRead事件不触发? 用Delphi做了一个directshow的网络源Filter,用的是TIdUDPServer接受UDP数据,但IdUDPServerUDPRead不触发呢,在关闭程序的时候却触发了,奇怪的问题,有碰到类似问题的朋友没? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 directshow的Filter就是一个Com组件.创建部分的constructor TBCPushPinNetwork.Create(out hr: HResult; Filter: TBCSource);begin inherited Create('_ Push Source Network', hr, Filter, 'Out'); UdpSocket := TIdUDPServer.Create(nil); UdpSocket.DefaultPort := RtpNetworkPort; UdpSocket.OnUDPRead := IdUDPServerUDPRead;end;设置端口部分的 UdpSocket.Active := False; UdpSocket.DefaultPort := StrToIntDef(LocalPort,2286); UdpSocket.Active := True;开始怀疑是不是Create时没有传一个窗口句柄给它,所以收不到消息,刚才把Form的句柄传给它,但还是一样. if UdpSocket = nil then begin UdpSocket := TIdUDPServer.Create(axOwner); UdpSocket.DefaultPort := RtpNetworkPort; UdpSocket.OnUDPRead := IdUDPServerUDPRead; end; 遇到过相同情况;结果为端口绑定问题;当IdUDPServer.Active:=False再TRUE;端口绑定为随机;IdUDPServer.Bindings组在关闭的时候会销毁;IdUDPServer.Bindings.add过程才载入默认端口DefaultPort; 尝试设置端口绑定: IdUDPServer.Active:=False; IdUDPServer.Bindings.Clear; IdUDPServer.DefaultPort:=Port; IdUDPServer.Bindings.Add; IdUDPServer.Active:=True; 谢谢,但我还没重复打开,关闭呢,而且端口里有数据,只是不触发OnUDPRead事件,用线程调用ReceiveBuffer能读到数据. TIdUDPServer不需要窗口的,他用的SOCKET的SELECT模型他的原理其实很简单,Active = True 时建了一个接受线线然后不停地读数据 在 TIdThread类中调用派生类的run函数COM里的,这个INDY控件我也用过, 好象是有问题,INDYSERVE好象是发不出去包,后来用INDYCLIENT代替的 这真的应该是DELPHI2009的BUG,请大家帮助。谢谢! 两个问题,在线等,急!急!急! 放100分给 hong_fang (scorpion) 美国失业IT白领改行拾狗粪 称时间灵活还能够健身 请帮忙修改,谢谢 WebBrowser控件的右键菜单怎么屏蔽呀 分布式数据库的数据调用问题 问题讨论 进来看看 up有分 各位高手,请教一个问题: 有什么办法限定报表超过30条记录就另起一页呢?用QuickRep 大家进来看看吧 delphi高手请进
创建部分的
constructor TBCPushPinNetwork.Create(out hr: HResult; Filter: TBCSource);
begin
inherited Create('_ Push Source Network', hr, Filter, 'Out'); UdpSocket := TIdUDPServer.Create(nil);
UdpSocket.DefaultPort := RtpNetworkPort;
UdpSocket.OnUDPRead := IdUDPServerUDPRead;
end;
设置端口部分的
UdpSocket.Active := False;
UdpSocket.DefaultPort := StrToIntDef(LocalPort,2286);
UdpSocket.Active := True;
开始怀疑是不是Create时没有传一个窗口句柄给它,所以收不到消息,刚才把Form的句柄传给它,但还是一样.
if UdpSocket = nil then
begin
UdpSocket := TIdUDPServer.Create(axOwner);
UdpSocket.DefaultPort := RtpNetworkPort;
UdpSocket.OnUDPRead := IdUDPServerUDPRead;
end;
尝试设置端口绑定:
IdUDPServer.Active:=False;
IdUDPServer.Bindings.Clear;
IdUDPServer.DefaultPort:=Port;
IdUDPServer.Bindings.Add;
IdUDPServer.Active:=True;
他的原理其实很简单,Active = True 时建了一个接受线线然后不停地读数据 在 TIdThread类中调用派生类的run函数COM里的,这个INDY控件我也用过, 好象是有问题,INDYSERVE好象是发不出去包,
后来用INDYCLIENT代替的