科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件Delphi实现NetBIOS广播收发

Delphi实现NetBIOS广播收发

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

NetBIOS网络协议对于很多读者来说可能比较陌生,但其实它是由IBM开发的一个很古老的协议,当年在LAN上也风光一时......

作者:余六 来源:天极论坛 2007年11月1日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
 procedure postrout(var ncbR:PNCB);

    begin

     sendMessage(wnd_BROADCAST,WM_TIMER,0,0);

    end;

   end.

   ////////窗口单元//////////

   unit broadcast;

   interface

   uses

     Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,netbios;

   type

     Tmain=class(TForm)

    private

     {Private declarations}

     file://消息处理过程,注意消息宏要与后处理中的一致

     procedure post_main(var Message:TMessage);message WM_TIMER;

   public

     {Public declarations}

   end;

    var

     main: Tmain;

     ncbname:UCHAR;

     ncbRock:PNCB;

     post_add:POST;

   implementation

     {$R *.DFM}{$A-}{$I-}

  /////////主窗口建立过程/////////

    procedure Tmain.FormCreate(Sender: TObject);

     var

      ret:UCHAR;

      i,x,y:integer;

      p:single;

     begin

      new(ncbRock);

      randomize();i:=0;

      FillChar(char_buffer,sizeof(char_buffer),0);

      post_add:=@postrout;

      file://取后处理例程的地址

      ncbRock.ncb_buffer:=@char_buffer; file://取数据缓冲区的地址。

      InitNCB(ncbRock);

      ret:=9;

      ncbname:=random(100);

      ncbRock.ncb_name[1]:=ncbname;

      ncbRock.ncb_command:=$30;

      file://加名,ret为0加名成功

      while ((i<10)and(ret<>0)) do

       begin

        ret:=netbiosSR(ncbRock);

        i:=i+1;

       end;

       if ret<>0 then

        begin

        for i:=1 to 20 do

         messagebeep(-1);

         MessageDlg(‘网络通信无法实现!您需要关闭程序重新运行.'',mtWarning,

         [mbOk],0);

        end

       else if ret=0 then

        begin

         ncbRock.ncb_post:=post_add;

         ncbRock.ncb_command:=$a3; file://异步接收方式字

         ncbRock.ncb_event:=0;

         ncbRock.ncb_length:=512;

        ret:=netbiosSR(ncbRock);

        end;

      end;

     ///////////广播消息处理过程/////

     procedure Tmain.post_main(var Message:TMessage);

      var

       x:integer;

       ret:UCHAR;

      begin

        file://取出数据缓冲区的内容

        for x:=0 to 511 do

         int_buffer[x+1]:=char_buffer[x];

         ////以下可以进行数据处理////

         file://重新打开异步接受

         ncbRock.ncb_post:=post_add;

         ncbRock.ncb_command:=$a3;

         ncbRock.ncb_event:=0;

         ncbRock.ncb_length:=512;

         ret:=netbiosSR(ncbRock);

        end;

      end.

  注:广播发送非常简单,不再详述。上述程序经过一年运行完全可靠。另外,经过改造可以将其改为LAN下的聊天程序。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章