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

Додаток 7

Текст програми створення сервера ,що отримує повідомлення від клієнт – програми за допомогою іменованих каналів.

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

; Server.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

PIPE_TIMEOUT DWORD 0

fConnected DWORD 0

dwThreadId DWORD 0

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

MsgCaption db "Сервер - програма",0

ErrCreatePipe db "Error create pipe",0

ErrPipeCount db "Error connect pipe",0

ErrCreateThread db "Error create thread", 0

chRequest db 256 dup(0)

theEnter db 0ah, 0dh, 0

buffer db 256 dup (?)

parameter db "%u"

.data?

hPipe HANDLE ?

hThread HANDLE ?

.const

BUFSIZE DWORD 256

.code

InstanceThread PROC Param:DWORD

LOCAL cbBytesRead:DWORD

mov eax, Param

mov hPipe, eax

invoke ReadFile, \

hPipe, \

addr chRequest, \

BUFSIZE, \

addr cbBytesRead,\

NULL

invoke StdOut, addr chRequest

invoke StdOut, addr theEnter

invoke FlushFileBuffers, hPipe

invoke DisconnectNamedPipe, hPipe

invoke CloseHandle, hPipe

ret

InstanceThread ENDP

start:

invoke SetConsoleTitle, addr MsgCaption

.while TRUE

invoke CreateNamedPipe,\

addr lpszPipename,\ ;PipeName

PIPE_ACCESS_DUPLEX, \ ;read access

PIPE_TYPE_MESSAGE + PIPE_READMODE_MESSAGE + PIPE_WAIT,\

;blocking mode

PIPE_UNLIMITED_INSTANCES, \ ;max instances

BUFSIZE, \ ;output buffer size

BUFSIZE, \ ;input buffer size

PIPE_TIMEOUT,\ ;client time-out

NULL ;no security atribute

mov hPipe,eax

.if hPipe==INVALID_HANDLE_VALUE

invoke StdOut,addr ErrCreatePipe

invoke StdOut, addr theEnter

.endif

invoke ConnectNamedPipe, hPipe, NULL

mov fConnected, eax

.if fConnected==ERROR_PIPE_CONNECTED

invoke StdOut, addr ErrPipeCount

invoke StdOut, addr theEnter

.break

.endif

.if fConnected != NULL

invoke CreateThread,\

NULL,\ ;No security attribute

0,\ ;Default stack size

addr InstanceThread,\ ;Addr thread proc

hPipe,\ ;Thread parameter

0, \ ;Not suspended

addr dwThreadId ;Returns thread ID

.if eax == INVALID_HANDLE_VALUE

invoke StdOut,addr ErrCreateThread

invoke StdOut,addr theEnter

.endif

.else

invoke CloseHandle ,hPipe

.endif

.endw

exit:

invoke ExitProcess,NULL

end start

Примітка: сервер – прграму потрібно лінкувати та транслювати як консольну програму. Windows 9x не підтримує іменованих каналів.

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