Форум: "WinAPI";
Текущий архив: 2009.05.31;
Скачать: [xml.tar.bz2];
ВнизPipe Найти похожие ветки
← →
sargast © (2008-05-11 00:53) [0]Здравствуйте.
Написал сервер и клиент, работающие через именованные каналы. Все работает, сообщения от клиента к серверу доходят. Теперь нужно сделать так, чтобы при получении сообщения сервер отсылал ответ клиенту, типо сообщение дошло. Как это можно сделать?
СерверVAR
PipeHandle:THANDLE;
BytesRead:DWORD;
buffer:Array [1..80]of char;
begin
PipeHandle:= CreateNamedPipe("\\.\Pipe\Jim", PIPE_ACCESS_DUPLEX,
PIPE_TYPE_BYTE or PIPE_READMODE_BYTE, 1,0, 0, 1000, Nil);
if PipeHandle= INVALID_HANDLE_VALUE then
begin
ShowMessageFmt("Ошибка %d при создании именованного канала",
[GetLastError]);
exit;
end;
ShowMessage("Сервер работает");
if ConnectNamedPipe(PipeHandle, Nil) = False then
begin
ShowMessageFmt("Ошибка %d при соединении по именованному каналу",
[GetLastError]);
CloseHandle(PipeHandle);
exit;
end;
if ReadFile(PipeHandle, buffer, sizeof(buffer),BytesRead, nil)=False then
begin
ShowMessageFmt("Ошибка %d при чтении данных", [GetLastError]);
CloseHandle(PipeHandle);
exit;
end;
ShowMessage(buffer);
if DisconnectNamedPipe(PipeHandle) = False then
begin
ShowMessageFmt("Ошибка %d при закрытии канала", [GetLastError]);
exit;
end;
CloseHandle(PipeHandle);
end;
КлиентCONST
PIPE_NAME= "\\.\Pipe\Jim";
VAR
PipeHandle:THANDLE;
BytesWritten:DWORD;
begin
if WaitNamedPipe(PIPE_NAME, NMPWAIT_WAIT_FOREVER) = False then
begin
ShowMessageFmt("Функция WaitNamedPipe завершена с ошибкой %d",[GetLastError]);
exit;
end;
// Открытие экземпляра именованного канала
PipeHandle:=CreateFile(PIPE_NAME,GENERIC_READ or GENERIC_WRITE, 0,
Nil, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, 0);
if PipeHandle= INVALID_HANDLE_VALUE then
begin
ShowMessageFmt("Функция CreateFile завершена с ошибкой %d", [GetLastError]);
exit;
end;
if WriteFile(PipeHandle,"This is a test",14, BytesWritten,Nil) = False then
begin
ShowMessageFmt("WriteFile failed with error %d", [GetLastError]);
CloseHandle(PipeHandle);
exit;
end;
ShowMessageFmt("Передано %d байт", [BytesWritten]);
CloseHandle(PipeHandle);
end;
← →
Cj © (2008-05-11 12:52) [1]Читай статью Игоря Шевченко про. здесь
http://www.delphimaster.ru/articles/named_pipes/index.html
← →
Сергей М. © (2008-05-11 21:01) [2]
> Как это можно сделать?
Точно так же как это делает клиент - WriteFile
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2009.05.31;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c