Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodychka-lab_OS.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.35 Mб
Скачать

Додаток 8

Текст клієнт - програми передачі повідомлення програмі - серверу.

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

; Client.asm

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

.386

.model flat, stdcall

option casemap:none

include \masm32\include\windows.inc

include \masm32\include\kernel32.inc

include \masm32\include\user32.inc

includelib \masm32\lib\user32.lib

includelib \masm32\lib\kernel32.lib

include \masm32\include\masm32.inc

includelib \masm32\lib\masm32.lib

wsprintfA PROTO C :DWORD, :VARARG

wsprintf equ <wsprintfA>

.data

cbWritten DWORD 0

MyLength DWORD 0

dwMode DWORD 0

lpszPipename db "\\.\pipe\mypipename",0

MsgCaption db "Message!",0

ErrOpenPipe db "Error oрen pipe", 0

ErrSetState db "Error set cannal state",0

ErrWriteFile db "Error write pipe",0

ErrCreateFile db "Error connect pipe",0

Message db "Hello from client to server program!",0

theTitle db "Дана програма вiдiшле програмi - серверу повiдомлення ",0

buffer db 256 dup (?)

parameter db "%u"

.data?

hPipe DWORD ?

.code

start:

invoke MessageBox, NULL, addr theTitle, addr MsgCaption, MB_OK

invoke CreateFile,\

addr lpszPipename,\ ;pipe name

GENERIC_WRITE, \ ;write access

0, ;no sharing

NULL, \ ;no security atribute

OPEN_EXISTING, \ ;open existing file

0, \ ;default attributes

NULL ;no template file

mov hPipe,eax

.if hPipe==INVALID_HANDLE_VALUE

invoke GetLastError

invoke wsprintf,addr buffer,addr parameter,eax

invoke MessageBox, NULL, addr ErrCreateFile,\

addr buffer,MB_ICONERROR + MB_OK

jmp exit

.endif

invoke WaitNamedPipe,addr lpszPipename,100

.if eax == 0

invoke MessageBox, NULL, addr ErrOpenPipe,\

addr MsgCaption,MB_ICONERROR + MB_OK

jmp exit

.endif

mov eax,PIPE_READMODE_MESSAGE

mov dwMode,eax

invoke SetNamedPipeHandleState,\

hPipe,\

addr dwMode,\

NULL,\

NULL

.if eax == 0

invoke MessageBox, NULL, addr ErrSetState,\

addr MsgCaption,MB_ICONERROR + MB_OK

.endif

invoke lstrlen, addr Message

mov MyLength,eax

invoke WriteFile, \

hPipe, \

addr Message, \

MyLength,\

addr cbWritten,\

NULL

.if !eax

invoke GetLastError

invoke wsprintf,addr buffer,addr parameter,eax

invoke MessageBox, NULL, addr ErrWriteFile,\

addr buffer,MB_ICONERROR + MB_OK

.endif

invoke CloseHandle, hPipe

exit:

invoke ExitProcess,NULL

end start

Результат виконання сервер – програми:

Результат виконання клієнт - програми:

В ид консольного вікна сервер – програми після передачі йому повідомлення

від клієнт - програми:

Опис взаємодії сервер та клієнт – програми: Під час завантаження сервер – програма створює іменований канал за допомогою функції CreateNamedPipe у випадку успішного створення каналу, за допомогою функції ConnectNamedPipe, програма буде очікувати на під’єднання до неї прграми – клієнта. У випадку успішного під’єднання сервер - програма створює новий потік, котрий за допомогою функції ReadFile буде зчитувати дані з каналу.

Клієнт - програма відкриває канал за допомогою функції CreateFile використовуючи параметр OPEN_EXISTING, після успішного відкриття каналу, клієнт – програма встановлює стан каналу та записує у нього відповідне повідомлення, котре потрібно передати програмі - серверу.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]