RSS    

   Реферат: Интранет сети

                               ¦                     L======T=====-

                               ¦                            ¦

            -----------------¬ ¦ г============¬   ----------+------¬

            ¦ Сервер NetWare +-+-¦Интерсеть IP¦---+ Сервер NetWare ¦

            ¦                +---¦            ¦-T-+                ¦

            L--------T--------   L============- ¦ L-----------------

                     ¦                          ¦

                     ¦                          ¦

            г========¦=======¬              Туннель IP

            ¦   Сеть IPX     ¦

            L================-

                                    Рис.3.10.

                 4. ОБМЕН СООБЩЕНИЯМИ В СЕТИ.

       Две программы, работающие на разных узлах  сети,  могут обмени-

    ваться данными двумя способами: пересылка пакетов через низкоуров-

    невый драйвер сети и пересылка сообщений через общий файл-сервер.

       Пример программы, посылающей сообщение на консоль сервера :

Uses Dos;

var k : integer;

sendString : string;

Procedure SendToCon(Message : string);

var

  reg : registers;

  s   : array [0..64] of byte;

  i   : integer;

begin

  s[0] := 0;

  s[1] := 4;

  s[2] := $09;

  s[3] := length(Message);

  for i := 1 to Length(Message) do

    s[i+3] := ord(Message[i]);

  reg.ah := $0E1;

  reg.bx := reg.ds;

  reg.ds := seg(s);

  reg.si := ofs(s);

  intr($21,reg);

  reg.ds := reg.bx;

end;

begin

  If ParamCount = 0 then

    begin

      Writeln('Send message to console utility by S.Perevoznik, 1993');

      Writeln('Usage : ssend <message>');

      halt;

    end;

  for k := 1 to paramcount do

begin

   SendString := SendString + Paramstr(k) + ' ';

end;

  SendToCon(sendString);

  Writeln('Message send to console ...');

end.

   Для передачи сообщения конкретному пользователю можно использовать

   следующие функции :

{$F+,O+}

Unit UICNet;

Interface

Uses Dos;

Function GetUserName(ConnectionNumber : byte;

                     Var ObjectFree : boolean) : string;

Function LocalDisk : boolean;

Procedure SendBroadcastMessage(Message:string;ConnectionNumber:byte);

Implementation

Function GetUserName(ConnectionNumber : byte;

                     Var ObjectFree : boolean) : string;

  var

    WordPtr:^Word;

    r           : registers;

    SendPacket  : array[0..4] of byte;

    ReplyPacket : array[0..64] of byte;

    UserName    : string;

    ObjectType  : word;

function GetWord(P: pointer): word;

  var

    WordPtr :^word;

    begin

      WordPtr := P;

      GetWord := swap(WordPtr^);

   end;

    begin

      SendPacket[2] := $16;

      SendPacket[3] := ConnectionNumber;

      WordPtr := addr(SendPacket);

      WordPtr^:=2;

      WordPtr := addr(SendPacket);

      WordPtr^ := 62;

      r.ah := $e3;

      r.ds := seg(SendPacket);

      r.si := ofs(SendPacket);

      r.es := seg(ReplyPacket);

      r.di := ofs(ReplyPacket);

      intr($21,r);

      if r.al = 0

        then

        begin

          ObjectType := GetWord(addr(ReplyPacket[6]));

          if ObjectType = 0 then ObjectFree := true

            else

              ObjectFree := false;

          move(ReplyPacket[8],UserName[1],48);

          UserName[0] := chr(48);

          GetUserName := Username;

       end;

          end;

Function LocalDisk : boolean;

var r : registers;

   begin

    r.ah := $19;

    intr($21,r);

    r.dl := r.al+1;

    r.ah := $e9;

    r.al := 0;

    r.dh := 0;

    intr($21,r);

    if r.ah = 128 then localdisk := true

      else localdisk := false;

  end;

Procedure SendBroadcastMessage(Message:string; ConnectionNumber:byte);

  var

    r           : registers;

    WordPtr     : ^word;

    SendPacket  : array [0..160] of byte;

    ReplyPacket : array [0..103] of byte;

  begin

   SendPacket[2] := 0;

   SendPacket[3] := 1;

   SendPacket[4] := ConnectionNumber;

   SendPacket[5] := length(Message);

   move(Message[1],SendPacket[6],length(Message));

   WordPtr := addr(SendPacket);

   WordPtr^ := Length(Message) + 4;

   r.ah := $e1;

   r.ds := seg(SendPacket);

   r.si := ofs(SendPacket);

   r.es := seg(ReplyPacket);

   r.di := ofs(ReplyPacket);

   intr($21,r);

 end;

end.

  Следующая программа демонстрирует возможность получения списка поль-

  зователей, подключенных к сети:

uses Dos;

function GetWord(P: pointer): word;

  var

    WordPtr :^word;

    begin

      WordPtr := P;

      GetWord := swap(WordPtr^);

   end;

Function GetLong(P:Pointer): longint;

  type long= record

    case integer of

    1:(Long1: Longint);

    2:(Word1,Word2:word);

  end;

var LongPtr :^Long;

    L : long;

    begin

      LongPtr := P;

      L.Word1 := swap(LongPtr^.Word2);

      L.Word2 := swap(LongPtr^.Word1);

      GetLong:= L.Long1;

   end;

Function GetConnectionInformation(ConnectionNumber:byte;

  Var ObjectName : string; var ObjectType : word;

  var ObjectID : longint; var LoginTime : string): byte;

  var

    WordPtr:^Word;

    r:registers;

    SendPacket : array[0..4] of byte;

    ReplyPacket : array[0..64] of byte;

    begin

      SendPacket[2] := $16;

      SendPacket[3] := ConnectionNumber;

      WordPtr := addr(SendPacket);

      WordPtr^:=2;

      WordPtr := addr(SendPacket);

      WordPtr^ := 62;

      r.ah := $e3;

      r.ds := seg(SendPacket);

      r.si := ofs(SendPacket);

      r.es := seg(ReplyPacket);

      r.di := ofs(ReplyPacket);

      intr($21,r);

      if r.al = 0

        then

        begin

          ObjectID := GetLong(addr(ReplyPacket[2]));

          ObjectType := GetWord(addr(ReplyPacket[6]));

          move(ReplyPacket[8],ObjectName[1],48);

          ObjectName[0] := chr(48);

          move(ReplyPacket[56],LoginTime[1],7);

          LoginTime[0] := chr(7);

       end;

          GetConnectionInformation := r.al;

          end;

      var

        ObjectName,LoginTime : string;

        ObjectType : word;

        ObjectID : longint;

        ConnectionNumber, CCode : byte;

        begin

          ConnectionNumber := 1;

          CCode := GetConnectionInformation(ConnectionNumber,

          ObjectName,ObjectType,ObjectID,LoginTime);

          while (CCode <> 253) and (ConnectionNumber<255)

            do

            begin

              if CCode <> 0

                then

                writeln('Cod ',CCode,ConnectionNumber)

                else if ObjectType <>0 then begin

                  Writeln(ConnectionNumber,' ',ObjectType,' ',ObjectID);

                  Writeln(ObjectName);

           end;

          inc(ConnectionNumber);

          CCode := GetConnectionInformation(ConnectionNumber,

          ObjectName,ObjectType,ObjectID,LoginTime);

          end;

        end.

                5. РАБОТА С ФАЙЛАМИ В ЛВС.

       Ниже приводятся тексты процедур, используемых при работе  в ЛВС

    для обслуживания файловой системы:

    ; Данная библиотека процедур разработана для использования в прог-

    ; раммах, написанных на Турбо-Паскале версии 4.0 и выше.

    ; Joe R. Doupnik and Sergey V. Perevoznik, 1988 - 1993

lprog equ   1           ; 0 for small memory, 1 for large memory model

                        ; Modify lprog to match the memory model

      if    lprog

x     equ   6           ; prologue overhead for large memory model

      else

x     equ   4           ; ditto, small memory model

      endif

begin macro name        ; begin a function, near or far

      public  name

      if    lprog

name  proc  far

      else

name  proc  near

      endif

      endm

        ; define Borland Pascal  segments

                        ; use neither Group nor Class

data  segment word public

data  ends

cseg  segment byte public

      assume      cs:cseg, ds:data, es:nothing

;--------------------------------

; Extended Open a File func(61) (3DH)

;

; var

;     Mode, Handle, RetCode : Integer;

;     Filename          : String[n];

;

; RetCode := xtndopn(Mode, Handle, Filename);

;

begin xtndopn

      push  bp

      mov   bp,sp

      push  ds

      lds   si,[bp+x+8]       ; put the mode in ax

      mov   ax,[si]

      mov   ah,03Dh           ; put the function in ah

      lds   dx,[bp+x]         ; ptr to ASCIIZ string

      inc   dx          ; add 1 to get to the beginning of the string

      int   21h

      jc    xtndopx           ; carry set means failure

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13


Новости


Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

                   

Новости

© 2010.