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.
... антенны 20м - наиболее оптимальный вариант, т.к. обеспечивает приемлемую дальность связи, при наименьших затратах на кабель и установку мачты. 2.5 Модернизация сети GSM под GPRS 2.5.1 Общая характеристика GPRS Одним из существенных недостатков сетей сотовой связи стандарта GSM на сегодняшний день является низкая скорость передачи данных (максимум 9.6 кбит/с). Да и сама организация этого ...
... малые узлы (на десятки абонентов), так и емкостью в тысячи линий. При выборе технологии доступа на «последней миле» сети оператор должен учитывать характеристики инфраструктуры (существующей или потенциальной), профиль абонентов и предлагаемые им услуги. Использование в сети Public Ethernet различных вариантов построения сегмента абонентского доступа (xDSL по медной паре, медные или оптические ...
... в компьютере, мог его угадать. При формировании пароля можно прибегнуть к помощи специального устройства, которое генерирует последовательности чисел и букв в зависимости от данных, которые задает пользователь. Существуют “невидимые” файлы. Это средство защиты состоит в изменении имени файла программы в каталоге диска таким образом, чтобы затруднить работу с файлами обычными командами DOS. ...
... ИT сектор); ориентацию на потребности граждан (местное наполнение, много он-лайновых организаций, использование ИТ в повседневной жизни, преподавание ИТ в школах) и правительственных учреждений (электронное правительство); конкурентность в телекоммуникационной области; независимое регулирование этой области с обязательствами продавца обеспечить универсальность доступа; а также э-готовое общество ...
0 комментариев