亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 用delphi實現netbios廣播收發 (2001年5月17日).txt

?? delphi 編程技巧
?? TXT
字號:
用Delphi實現NetBIOS廣播收發 (2001年5月17日) 

本站更新  分類:局域網,通訊   作者:成都 firefly  推薦:   閱讀次數:231  
(http://www.codesky.net)  

--------------------------------------------------------------------------------

  NetBIOS網絡協議對于很多讀者來說可能比較陌生,但其實它是由IBM開發的一很古老的協議,當年在LAN上也風光一時。說它老,其實也不過10年光景,IT業的展實在是太快。由于NetBIOS不具備路由功能,也就是說它的數據包無法跨網段傳,因此在廣域網、城域網大行其道的今天,它已退居配角。如果你有心的話,能發現在Window95/98的網絡協議中仍然保留著NetBIOS,不過它已經改名叫NetBEUINetBIOS擴展用戶接口),是NetBIOS的Microsoft改進版。另外在TCP/IP以及IPX/SPX 協議中,也依然保留了對NetBIOS的支持,只要查看網絡議屬性中的高級,就能看到啟用NetBIOS的選項。
  之所以這樣是有原因的。NetBIOS協議短小精悍,非常適用于小型局域網,特別是一些對實時性要求較高的網絡環境。NetBIOS的廣播功能由于有開發使用方便、系統開銷小的優點,所以在很多場合仍然被大量使用。筆者由于工作需要,在一個航天測控軟件的編制中就使用了NetBIOS廣播功能。
  我原以為這是件很簡單的工作,因為WIN32API中提供了一個Netbios函數,里面封裝了所有函數和數據結構,用起來很方便,在BC和VC下都如此。可是由于這次是使用流行的Delphi作編譯器,卻遇到了意想不到的麻煩:號稱全面移植WIN32API的Dlphi
中偏偏沒有Netbios函數!這下頓時讓我方寸大亂。怎么辦?總不能從底層干起吧?而且時間也不允許。在冷靜下來之后,我忽然想到,既然WIN95支持NetBIOS,那么系統就一定會提供DLL支持,編譯器本身是沒有底層支持的。于是我在機器中搜索,果然,
在SYSTEM目錄下有一個Netbios.dll,用快速查看將其打開,在導出表部分顯示如下:
  導出表:
  序數 入口 名稱
  0000 00001a37 NetbiosAddthd
  0001 000019eb NetbiosDelete
  0002 00001a96 NetbiosDelthd
  0003 000019b1 NetbiosInitialize
  0004 0000186b PostRoutineCaller
  0005 0000102e _Netbios
  注意到那個0005號_Netbios導出函數了嗎?那就是我需要的!經過緊張的試驗調試,證明它和WIN32API手冊上的Netbios完全一樣。剩下的工作就比較簡單了,定義一個NCB(Netbios控制塊)記錄,將NCB數據結構封裝在里面;聲明一個后處理例程以及消息處理過程,以完成廣播數據的接收和發送。有關NCB數據結構的詳細內容以及 NetBIOS廣播的原理,限于篇幅我就省略了。需要的朋友可以查看BC或VC的Help或相關書籍。下面是有關的Delphi源代碼。
  /////////Netbios單元///////////
  unit netbios;
  interface
  uses windows,messages,Forms,SysUtils;
  type
  {$X+}{$A+}
   //聲明一個NCB記錄指針。
   PNCB=^NCB;
  //聲明一個后處理例程的過程類型。
   POST=procedure(var ncbR:PNCB);
   //以下是NCB記錄,教訓1:將上面的編譯選項置為{$A+}以取消數據對齊。
如果在廣播中有浮點數的話,數據對齊會讓你大吃苦頭!我已經有過慘痛教訓!:(
   NCB=record
   ncb_command:UCHAR;
   ncb_retcode:UCHAR;
   ncb_lsn:UCHAR;
   ncb_num:UCHAR;
   ncb_buffer:PCHAR;
   ncb_length:WORD;
   ncb_callname:array [1..16] of UCHAR;
   ncb_name:array [1..16] of UCHAR;
   ncb_rto:UCHAR;
   ncb_sto:UCHAR;
   ncb_post:POST;
   ncb_lana_num:UCHAR;
   ncb_cmd_cplt:UCHAR;
   ncb_reserve:array [1..10] of UCHAR;
   ncb_event:HANDLE;
   end;
  //聲明自己的Netbios函數。教訓2:一定要使用pascal調用規范,否則,嘿嘿!!
  function NetbiosSR(ncbX:PNCB):UCHAR;pascal;
  //初始化NCB。
  procedure InitNCB(var ncbY:PNCB);
  //后處理例程,注意使用遠指針。
  procedure postrout(var ncbR:PNCB);stdcall;far;
  var
   char_buffer:array[0..511]of UCHAR;
   int_buffer:array[1..512]of Byte;
  implementation
   //調用系統的Netbios。dll中的Netbios函數標號是6。Delphi搜索外部文件的
順序是當前目錄→系統目錄→其他目錄,別忘了保證存在Netbios.dll。
   function NetbiosSR(ncbX:PNCB):UCHAR;external ‘netbios' index 6;
   procedure InitNCB(var ncbY:PNCB);
   var
   x:integer;
   begin
   ncbY.ncb_command:=0;
   ncbY.ncb_retcode:=0;
   ncbY.ncb_lsn:=0;
   ncbY.ncb_num:=0;
   ncbY.ncb_length:=512; //數據緩沖長度,最大512B。
   for x:=1 to 16 do
   begin
   ncbY.ncb_callname[x]:=0;
   ncbY.ncb_name[x]:=0;
   end;
   ncbY.ncb_rto:=0;
   ncbY.ncb_sto:=0;
   ncbY.ncb_lana_num:=0;
   ncbY.ncb_cmd_cplt:=0;
   for x:=1 to 10 do
   ncbY.ncb_reserve[x]:=0;
   ncbY.ncb_event:=0;
   end;
  //后處理例程的作用是當接收到廣播消息時,立即向相應窗口發送消息。我在這里偷了點懶,以廣播方式發送一個定時器消息。如果你愿意可以向指定窗口發送自定義消息,這樣要復雜一些。首先,要把指定窗口的句柄傳遞給后處理例程。通常這是做不到的,但可以利用一些技巧做到。在NCB記錄后面緊挨著聲明一個句柄類型,然后把指定窗口的句柄賦值給它的實例變量;這樣句柄變量的地址與NCB是連續的。在后處理中通過指針或匯編語句將ncbR的地址移到最后一個字節+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}
   //消息處理過程,注意消息宏要與后處理中的一致。
   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;
   //取后處理例程的地址。
   ncbRock.ncb_buffer:=@char_buf
  fer; //取數據緩沖區的地址。
   InitNCB(ncbRock);
   ret:=9;
   ncbname:=random(100);
   ncbRock.ncb_name[1]:=ncbna
  me;
   ncbRock.ncb_command:=$30;
   //加名,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; //異步接收方式字。
   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
   //取出數據緩沖區的內容
   for x:=0 to 511 do
   int_buffer[x+1]:=char_buffer[x];
   ////以下可以進行數據處理////
   //重新打開異步接受。
   ncbRock.ncb_post:=post_add;
   ncbRock.ncb_command:=$a3;
   ncbRock.ncb_event:=0;
   ncbRock.ncb_length:=512;
   ret:=netbiosSR(ncbRock);
  end;
  end.
  注:廣播發送非常簡單,不再詳述。上述程序經過一年運行完全可靠。另外, 經過改造可以將其改為LAN下的聊天程序。
有什么問題可以Email到ywfirefly@ynmail.com與我聯系。歡迎切磋。

 
 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
无码av免费一区二区三区试看| 久99久精品视频免费观看| 亚洲一区二区在线播放相泽| 久久机这里只有精品| 99精品黄色片免费大全| 日韩欧美一级特黄在线播放| 亚洲女厕所小便bbb| 韩日欧美一区二区三区| 欧美日本高清视频在线观看| 亚洲精品久久久蜜桃| 成人少妇影院yyyy| 2017欧美狠狠色| 久久精品国产亚洲高清剧情介绍| 日本精品免费观看高清观看| 国产三级精品三级在线专区| 亚洲国产成人av网| 色老头久久综合| 亚洲欧洲成人自拍| 成人影视亚洲图片在线| 久久蜜臀中文字幕| 久久99深爱久久99精品| 日韩午夜在线观看视频| 日韩精品高清不卡| 精品福利一区二区三区免费视频| 一区av在线播放| 色激情天天射综合网| 中文字幕亚洲在| 成人app下载| 日韩一区有码在线| 不卡的av电影| 1024亚洲合集| 91麻豆6部合集magnet| 亚洲欧美一区二区视频| 99国产精品一区| 亚洲另类一区二区| 欧美日韩色综合| 亚洲va欧美va天堂v国产综合| 欧美午夜电影网| 日韩国产一二三区| 日韩精品一区二区三区在线观看| 六月丁香婷婷色狠狠久久| 精品久久一区二区三区| 国产精品99久久久久久似苏梦涵| 国产日韩欧美在线一区| 91亚洲精品久久久蜜桃网站| 国产精品久久久久aaaa| 91免费视频网| 天天影视色香欲综合网老头| 日韩免费性生活视频播放| 国产精一品亚洲二区在线视频| 久久久久久久久蜜桃| 99这里都是精品| 亚洲国产精品一区二区www在线| 欧美日韩午夜在线视频| 久久国产免费看| 国产午夜精品福利| 欧洲一区二区三区在线| 午夜精品久久久久久久99樱桃| 欧美一区二区三区电影| 国产成人在线视频免费播放| 亚洲欧美另类久久久精品2019| 欧美丰满美乳xxx高潮www| 国产一区二区三区国产| 一区二区三区不卡视频在线观看| 欧美精品自拍偷拍| 成人激情文学综合网| 丝袜亚洲另类欧美| 国产欧美日韩视频在线观看| 欧美在线观看视频一区二区三区| 麻豆91精品91久久久的内涵| 2023国产精品| 欧美日韩视频在线第一区| 国产老肥熟一区二区三区| 一区二区三区在线观看视频| 欧美一级欧美一级在线播放| 不卡视频一二三| 美女在线视频一区| 亚洲精品久久嫩草网站秘色| 精品久久久久久亚洲综合网| 在线中文字幕一区| 成人一道本在线| 免费在线看成人av| 一区二区三区不卡视频| 日本一区二区三区电影| 欧美一区三区四区| 91国产丝袜在线播放| 国产成人免费在线| 毛片一区二区三区| 亚洲va欧美va人人爽| 国产精品网站导航| 亚洲精品久久嫩草网站秘色| 亚洲精品一区二区三区福利 | 久久精品在线免费观看| 欧美性一二三区| 99久久99久久精品国产片果冻| 麻豆久久久久久| 午夜欧美2019年伦理| ...av二区三区久久精品| 欧美国产97人人爽人人喊| 欧美精品一区二区久久久| 欧美电影影音先锋| 欧美日韩久久久一区| 波多野结衣欧美| 成人av动漫在线| av成人老司机| 成人一区二区视频| 国产成人aaa| 国产成人av一区二区三区在线| 寂寞少妇一区二区三区| 日本视频免费一区| 偷拍与自拍一区| 日韩中文欧美在线| 男女男精品视频| 精品亚洲成av人在线观看| 免费亚洲电影在线| 看电影不卡的网站| 国产一区二区三区高清播放| 国产一区二区视频在线播放| 国产精品资源在线| 风间由美性色一区二区三区| 国产jizzjizz一区二区| kk眼镜猥琐国模调教系列一区二区| 成人三级在线视频| 色菇凉天天综合网| 欧美撒尿777hd撒尿| 欧美精品日韩一本| 日韩免费视频线观看| 337p日本欧洲亚洲大胆精品 | 欧美一区二区网站| 日韩久久久精品| 国产精品无码永久免费888| 中文字幕一区二区三区精华液| 亚洲色图欧洲色图婷婷| 亚洲国产日日夜夜| 精品一区二区三区免费观看 | 懂色av一区二区三区免费观看 | 欧美精品tushy高清| 911精品国产一区二区在线| 日韩精品在线一区二区| 国产日韩欧美精品一区| 一区二区三区日韩欧美| 青草国产精品久久久久久| 国产精品资源在线看| 91久久线看在观草草青青| 欧美精品乱码久久久久久按摩| 久久久精品人体av艺术| 亚洲色图在线播放| 久久 天天综合| 色综合咪咪久久| 精品精品国产高清一毛片一天堂| 中文字幕va一区二区三区| 亚洲国产欧美日韩另类综合| 久久99精品一区二区三区| av激情综合网| 日韩一级完整毛片| 国产日产欧美一区二区三区| 亚洲午夜一区二区| 国产乱人伦偷精品视频不卡| 色综合一个色综合| 久久久久久麻豆| 日韩影院精彩在线| 成人免费观看av| 日韩欧美一级二级| 亚洲一区二区在线免费看| 国产激情精品久久久第一区二区 | 亚洲欧美日韩中文字幕一区二区三区 | 欧美一级日韩一级| 亚洲人xxxx| 国产福利91精品一区| 555夜色666亚洲国产免| 自拍视频在线观看一区二区| 精品一区二区三区免费| 欧美日韩一区国产| 国产精品视频第一区| 久久99精品久久久久久动态图| 欧美亚洲国产一区二区三区| 综合久久久久久久| 国产成人午夜精品5599| 欧美大片在线观看| 午夜精品久久久久久久99水蜜桃| 91麻豆国产自产在线观看| 久久久电影一区二区三区| 狠狠色狠狠色综合系列| 日韩午夜激情免费电影| 亚洲午夜精品久久久久久久久| 99久久免费视频.com| 国产欧美日韩麻豆91| 国产毛片精品一区| 2014亚洲片线观看视频免费| 美脚の诱脚舐め脚责91| 69av一区二区三区| 亚洲成人三级小说| 欧美剧在线免费观看网站| 亚洲六月丁香色婷婷综合久久| 99精品黄色片免费大全| 亚洲国产成人午夜在线一区| 成人免费视频视频| 中文字幕综合网| eeuss鲁一区二区三区| 亚洲精品国产无天堂网2021|