IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Передача сообщения, Создание канала передачи данных
сообщение
Сообщение #1


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


Всем привет..Задача:

Имеется два приложения--одно из них серверное(главное), второе - клиентское(не главное). Передача данных т.е. сообщений осуществляется по каналу через протокол NetBios (передача данных вернее сообщений работает хорошо)..Но нужно модернизировать программу т.е. вывести информацию о канале и информацию о сетевом адаптере - пользователю. Как это осуществить?


серверное прил:

program netbios;
uses crt, dos;
type
ncb = record
Cmd: byte;
CCode: byte;
LocalSessionNumber: byte;
NetworkNameNumber: byte;
BufOfs: word;
BufSeg: word;
Size: word;
CallName: array[1..16] of char;
OurName: array[1..16] of char;
ReceiveTimeout: byte;
SendTimeout: byte;
PostRoutineOfs: word;
PostRoutineSeg: word;
AdapterNumber: byte;
FinalCCode: byte;
Reserved: array[1..14] of char;
end;
var
ncbrec: ncb;

procedure Dobavit;
var
regs: registers;
begin
regs.ES := seg(ncbrec);
regs.BX := ofs(ncbrec);
FillChar(ncbrec.OurName, 16, 's');
ncbrec.Cmd := $30;
ncbrec.AdapterNumber := 0;
Intr($5c, regs);
end;

procedure Udalit;
var
regs: registers;
begin
regs.ES := seg(ncbrec);
regs.BX := ofs(ncbrec);
ncbrec.Cmd := $31;
intr($5c, regs);
end;

procedure Call; {procedura sozdanija kanala}
var
regs: registers;
begin
regs.ES := seg(ncbrec);
regs.BX := ofs(ncbrec);
ncbrec.cmd := $10; {v 'Cmd' zanosim kod komandi 'CallW'}
FillChar(ncbrec.CallName, 16, 'r'); {v 'Call' zanosim imya s kem budet sozdan kanal}
intr($5c,regs); {prerivanije}
end;

procedure HangUp; {procedura razriva kanala}
var
regs: registers;
begin
regs.ES := seg(ncbrec);
regs.BX := ofs(ncbrec);
ncbrec.cmd := $12;
intr($5c, regs);
end;

procedure Send; {procedura otpravki dannih v kanal}
var
regs:registers;
str: string;
begin
write('Vvedite soobsch: ');
readln(str); {schitivaem vvedennije polzovatelem dannije dlya otpravki}
regs.ES := seg(ncbrec);
regs.BX := ofs(ncbrec);
ncbrec.Cmd := $14; {v 'Cmd' zanosim kod komandi 'SendW'}
ncbrec.Size := length(str) + 1; {razmer dannih dlya otpravki}
ncbrec.BufOfs := ofs(str); {ukazivaem smeschenije bufera kotoriy soderzhit dannije dlya otpravki}
ncbrec.BufSeg := seg(str); {ukazivaem segment bufera}
intr($5c, regs); {vizov prerivanija}
end;

begin
with ncbrec do
begin
Cmd := 0;
CCode := 0;
LocalSessionNumber := 0;
NetworkNameNumber := 0;
BufOfs := 0;
BufSeg := 0;
Size := 0;
ReceiveTimeout := 0;
SendTimeout := 0;
PostRoutineOfs := 0;
PostRoutineSeg := 0;
AdapterNumber := 0;
FinalCCode := 0;
end;
clrscr;
Dobavit; {dobavlyaem imya v tablicu imen}
writeln('Dobavleno imya: ', ncbrec.FinalCCode);
writeln('Adapter Number: ', ncbrec.AdapterNumber);
writeln;
if ncbrec.FinalCCode = 0 then begin {esli oshibok net to ->}
Call; {organizuem kanal}
writeln('Call: ',ncbrec.FinalCCode);
writeln;
Send; {otpravlyam dannije v kanal}
writeln;
writeln('Soobsch otpravleno: ',ncbrec.FinalCCode);
writeln;
HangUp; {razriv kanal}
writeln('Hang up: ',ncbrec.FinalCCode);
writeln;
end;
Udalit; {udalyaem imya iz tablici imen}
writeln('Udaleno: ',ncbrec.FinalCCode);
readln;
end.


клиенсткое прил:


program netbios;
uses crt, dos;
type
ncb = record {objavlenije setevogo upravlayuschego bloka i ego peremennih}
Cmd: byte;
CCode: byte;
LocalSessionNumber: byte;
NetworkNameNumber: byte;
BufOfs: word;
BufSeg: word;
Size: word;
CallName: array[1..16] of char;
OurName: array[1..16] of char;
ReceiveTimeout: byte;
SendTimeout: byte;
PostRoutineOfs: word;
PostRoutineSeg: word;
AdapterNumber: byte;
FinalCCode: byte;
Reserved: array[1..14] of char;
end;
var
ncbrec: ncb;

procedure Dobavit; {procedura doabavlenija imeni iz peremennoy 'OurName' v tablicu imen}

var
regs: registers;
begin
regs.ES := seg(ncbrec);
regs.BX := ofs(ncbrec);
FillChar(ncbrec.OurName, 16, 'r');
ncbrec.Cmd := $30;
ncbrec.AdapterNumber := 0;
Intr($5c, regs);
end;

procedure Udalit; {procedura udalenija imeni iz tablici imen}
var
regs: registers;
begin
regs.ES := seg(ncbrec);
regs.BX := ofs(ncbrec);
ncbrec.Cmd := $31;
intr($5c,regs);
end;

procedure Listen; {procedora dlya organizacii kanala,ona budet nahoditsya
v ozhidanii poka server ne pozhelaet sozdat kanal}
var
regs: registers;
begin
regs.ES := seg(ncbrec);
regs.BX := ofs(ncbrec);
ncbrec.cmd := $11; {v 'Cmd' zanosim kod komandi 'ListenW'}
FillChar(ncbrec.CallName, 16, 's'); {v 'CallName' zanosim imya 'servera' s kotorim budet organizovan kanal}
intr($5c, regs); {vizivaem prerivanije}
end;

procedure HangUp; {procedura razriva kanala}
var
regs: registers;
begin
regs.ES := seg(ncbrec);
regs.BX := ofs(ncbrec);
ncbrec.cmd := $12; { v 'Cmd' zanosim kod komandi 'HangUpW'}
intr($5c, regs); {prerivanije}
end;

procedure Polu4it; {procedura priema dannih iz kanala}
var
regs:registers;
str: string;
begin
regs.ES := seg(ncbrec);
regs.BX := ofs(ncbrec);
ncbrec.Cmd := $15; { v 'Cmd' zanosim kod komandi 'ReceiveW'}
ncbrec.Size := 32;
ncbrec.BufOfs := ofs(str); {ukazivaem smeschenije bufera,dlya priema soobschenij}
ncbrec.BufSeg := seg(str); {ukazivaem segment bufera}
intr($5c, regs); {prerivanije}
writeln('Soobsch: ', str); {vivod poluchennih dannih}
end;

begin
with ncbrec do
begin
Cmd := 0;
CCode := 0;
LocalSessionNumber := 0;
NetworkNameNumber := 0;
BufOfs := 0;
BufSeg := 0;
Size := 0;
ReceiveTimeout := 0;
SendTimeout := 0;
PostRoutineOfs := 0;
PostRoutineSeg := 0;
AdapterNumber := 0;
FinalCCode := 0;
end;
clrscr;
Dobavit; {dobavlyaem imya v tablicu imen}
writeln('Dobavleno imya: ', ncbrec.FinalCCode);
writeln('Adapter Number: ', ncbrec.AdapterNumber);
writeln;
if ncbrec.FinalCCode = 0 then begin {esli pri dobavlenii imeni ne vozniklo oshibok to ->}
Listen; {vizov proceduri ozhidanija servera dalya sozdanija kanala}
writeln('Listen: ',ncbrec.FinalCCode);
writeln;
writeln('Nazhmite "Enter" pri gotovnosti priema...');
readln;
Polu4it; {procedura schitavanija dannih iz kanala}
writeln;
writeln('Polu4eno: ',ncbrec.FinalCCode);
writeln;
HangUp; {razriv kanala}
writeln('Hang up: ',ncbrec.FinalCCode);
writeln;
end;
Udalit; {udalenije imeni iz tablici imen}
writeln('Udaleno imya: ',ncbrec.FinalCCode);
readln;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 18.04.2024 7:23
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name