在delphi下收发数据包的程序范例,内容大多出自同一篇不能实用的文章,不知有哪位大哥有相关资料或者实例。要能完成网络适配器枚举,加名,侦听,接受,发送等基本功能,不胜感激.(也可发EMAIL:[email protected])
部分源码:
function NETBIOS_ADDName(lana:integer;name:string;num:integer):integer;
var
  i,x:integer;
  s:string;
  AddNameNcb,addnncb:pncb;
  delay:integer;
begin
      new(AddNameNcb);
      //AddNameNcb.ncb_name:='XL_Video_000010';
      AddNameNcb.ncb_post:=nil;
      AddNameNcb.ncb_lana_num:=lana;
      for x:=0 to length(name) do begin//name='XL_Video_000010'
          AddNameNcb.ncb_name[x]:=byte(name[x]);
      end;
      AddNameNcb.ncb_command:=NCBADDNAME or ASYNCH;//
      Netbios(addr(AddNameNcb));
      delay:=0;
      Repeat
        sleep(20);
        inc(delay);
      until
        (AddNameNcb.ncb_cmd_cplt<>NRC_PENDING)or(delay>=300);
      if AddNameNcb.ncb_cmd_cplt=$0d then begin
        AddNameNcb.ncb_lana_num:=lana;
        for x:=0 to length(name) do begin
           AddNameNcb.ncb_name[x]:=byte(name[x]);
        end;
        //AddNameNcb.ncb_name:='XL_Video_000010 ';
        AddNameNcb.ncb_post:=nil;
        AddNameNcb.ncb_command:=NCBDELNAME or ASYNCH ;
        Netbios(addr(AddNameNcb));
        delay:=0;
        Repeat
         sleep(20);
         inc(delay);
        until
         (AddNameNcb.ncb_cmd_cplt<>NRC_PENDING) or (delay>=300);
      end
      else if AddNameNcb.ncb_retcode=NRC_GOODRET then begin
         showmessage('加名成功:'+' '+inttostr(AddNameNcb.ncb_cmd_cplt));      end
      else begin
         showmessage('加名失败:'+' '+inttostr(AddNameNcb.ncb_cmd_cplt));
        result:=AddNameNcb.ncb_retcode;      end;
end;
function NETBIOS_LanaEnum(g_lenum:PLanaEnum):integer;
var
  i,j:integer;
  s:string;  
  encb:pncb;
begin
  //dispose(encb);
  new(encb);
  encb.ncb_buffer:=addr(g_lenum);//问题是否在此处?help me!
  encb.ncb_length:=sizeof(TADAPTERSTATUS)+16*sizeof(TNAMEBUFFER);//sizeof(g_lenum)
  encb.ncb_command:=NCBENUM;
  Netbios(addr(encb));
  if encb.ncb_cmd_cplt<>NRC_GOODRET then begin//在此处返回5:命令超时
     showmessage('netbios:enum_error');
     result:=encb.ncb_retcode;
     exit;
   end;
   result:=NRC_GOODRET;
end;