我设计一个小软件,它使用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

解决方案 »

  1.   

    我的做法是用一个当判断到你没有登录跳转到登录页面的时候,在session中记录此时的页面,不用记录路径,比如此时的页面是修改密码,你就记录一个Modify,当登录成功后,从session中取出这个值,然后通过js判断这个值是什么,比如if(value=='nodify)window.loaction.href="...";else if(value=="").......'
      

  2.   

    1楼你的回答好象不对题啊,我的是DELPHI,而且是数据库应用软件,不是网页。
      

  3.   

    自己解决了,不使用SENDBUFFER 而是改用SEND,然后就可以直接发字符串了。也不再出现那样的问题了,广播和接收都正常了。不错。