我设计一个小软件,它使用SQL数据库的,它可以在多台电脑上运行,都对应一台电脑上的SQL数据库。为了实现软件主窗体上的一个DBGRIDEH控件上的列表的自动更新,我不想让用户去点一下按钮,然后再刷新一下。而是想自动的更新,就是在软件设计上只有用户做了保存操作时,就用UDPSERVER控件发出广播数据包,使整个局域网内的用户都能收到这个广播包。而这个小软件自己又可以接收这个数据包,如果接到这个包,就更新一下数据源。我的做法是在主窗体上使用一个UDPSERVER控件,然后在它的UDPServerUDPRead事件里写上读取数据包和更新数据源的代码。
procedure TMainForm.UDPServerUDPRead(AThread: TIdUDPListenerThread;
AData: TBytes; ABinding: TIdSocketHandle);
var
Buf:ARRAY[0..1] OF byte;
begin
BUF[0]:=ADATA[0];
buf[1]:=adata[1];
if (buf[0]=$AA) and (buf[1]=$AA) then
begin
adoquery1.Close;
adoquery1.Open;
end;
if (buf[0]=$BB) and (buf[1]=$BB) then
begin
adoquery2.Close;
adoquery2.Open;
end;
end;在其它数据操作窗体上的保存事件里加上下面的代码。
buf[0]:=$AA;
buf[1]:=$AA;
mainform.udpserver.SendBuffer(IPSTR,PORTSTR,@Buf);//IPSTR=192.168.1.255 PORTSTR=10016
上面的代码中的关于UDPSERVER的指令还是调用主窗体上的UDPSERVER控件,没有另外在其它窗体上加控件。
我的问题是:1、这样做发送广播数据包不知道能否成功!(我没做过广播)
2、在自己一台电脑上试验,接收端好象收不到任何数据!是广播不发给自己吗?
注意:我使用的是DELPHI2010 INDY10
procedure TMainForm.UDPServerUDPRead(AThread: TIdUDPListenerThread;
AData: TBytes; ABinding: TIdSocketHandle);
var
Buf:ARRAY[0..1] OF byte;
begin
BUF[0]:=ADATA[0];
buf[1]:=adata[1];
if (buf[0]=$AA) and (buf[1]=$AA) then
begin
adoquery1.Close;
adoquery1.Open;
end;
if (buf[0]=$BB) and (buf[1]=$BB) then
begin
adoquery2.Close;
adoquery2.Open;
end;
end;在其它数据操作窗体上的保存事件里加上下面的代码。
buf[0]:=$AA;
buf[1]:=$AA;
mainform.udpserver.SendBuffer(IPSTR,PORTSTR,@Buf);//IPSTR=192.168.1.255 PORTSTR=10016
上面的代码中的关于UDPSERVER的指令还是调用主窗体上的UDPSERVER控件,没有另外在其它窗体上加控件。
我的问题是:1、这样做发送广播数据包不知道能否成功!(我没做过广播)
2、在自己一台电脑上试验,接收端好象收不到任何数据!是广播不发给自己吗?
注意:我使用的是DELPHI2010 INDY10
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货