Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Архив2 / курсовая docx525 / Kursova_Khristi

.docx
Скачиваний:
11
Добавлен:
07.08.2013
Размер:
23.95 Кб
Скачать

Сервер

#include <stdio.h>

#include <windows.h>

//Name given to the pipe

//#define g_szPipeName "\\\\.\\Pipe\\MyNamedPipe"

//Pipe name format - \\.\pipe\pipename

#define BUFFER_SIZE 1024 //1k

#define ACK_MESG_RECV "Message received successfully"

int main(int argc, char* argv[])

{

LPTSTR g_szPipeName = TEXT("\\\\.\\pipe\\MyPipe");

HANDLE hPipe;

hPipe = CreateNamedPipe(

g_szPipeName, // pipe name

PIPE_ACCESS_DUPLEX, // read/write access

PIPE_TYPE_MESSAGE | // message type pipe

PIPE_READMODE_MESSAGE | // message-read mode

PIPE_WAIT, // blocking mode

PIPE_UNLIMITED_INSTANCES, // max. instances

BUFFER_SIZE, // output buffer size

BUFFER_SIZE, // input buffer size

NMPWAIT_USE_DEFAULT_WAIT, // client time-out

NULL); // default security attribute

if (INVALID_HANDLE_VALUE == hPipe)

{

printf("\nError occurred while "

"creating the pipe: %d", GetLastError());

return 1; //Error

}

else

{

printf("\nCreateNamedPipe() was successful.");

}

printf("\nWaiting for client connection...");

//Wait for the client to connect

BOOL bClientConnected = ConnectNamedPipe(hPipe, NULL);

if (FALSE == bClientConnected)

{

printf("\nError occurred while connecting"

" to the client: %d", GetLastError());

CloseHandle(hPipe);

return 1; //Error

}

else

{

printf("\nConnectNamedPipe() was successful.");

}

char szBuffer[BUFFER_SIZE];

DWORD cbBytes;

//We are connected to the client.

//To communicate with the client

//we will use ReadFile()/WriteFile()

//on the pipe handle - hPipe

//Read client message

BOOL bResult = ReadFile(

hPipe, // handle to pipe

szBuffer, // buffer to receive data

sizeof(szBuffer), // size of buffer

&cbBytes, // number of bytes read

NULL); // not overlapped I/O

if ( (!bResult) || (0 == cbBytes))

{

printf("\nError occurred while reading "

"from the client: %d", GetLastError());

CloseHandle(hPipe);

return 1; //Error

}

else

{

printf("\nReadFile() was successful.");

}

printf("\nClient sent the following message: %s", szBuffer);

strcpy(szBuffer, ACK_MESG_RECV);

//Reply to client

bResult = WriteFile(

hPipe, // handle to pipe

szBuffer, // buffer to write from

strlen(szBuffer)+1, // number of bytes to write, include the NULL

&cbBytes, // number of bytes written

NULL); // not overlapped I/O

if ( (!bResult) || (strlen(szBuffer)+1 != cbBytes))

{

printf("\nError occurred while writing"

" to the client: %d", GetLastError());

CloseHandle(hPipe);

return 1; //Error

}

else

{

printf("\nWriteFile() was successful.");

}

CloseHandle(hPipe);

return 0; //Success

}

Клієнт

#include <stdio.h>

#include <windows.h>

#include <conio.h>

//Name given to the pipe

//#define g_szPipeName "\\\\.\\Pipe\\MyNamedPipe"

//Pipe name format - \\servername\pipe\pipename

//This pipe is for server on the same computer,

//however, pipes can be used to

//connect to a remote server

#define BUFFER_SIZE 1024 //1k

#define ACK_MESG_RECV "Message received successfully"

int main(int argc, char* argv[])

{

LPTSTR g_szPipeName = TEXT("\\\\.\\pipe\\MyPipe");

HANDLE hPipe;

//Connect to the server pipe using CreateFile()

hPipe = CreateFile(

g_szPipeName, // pipe name

GENERIC_READ | // read and write access

GENERIC_WRITE,

0, // no sharing

NULL, // default security attributes

OPEN_EXISTING, // opens existing pipe

0, // default attributes

NULL); // no template file

if (INVALID_HANDLE_VALUE == hPipe)

{

printf("\nError occurred while connecting"

" to the server: %d", GetLastError());

//One might want to check whether the server pipe is busy

//This sample will error out if the server pipe is busy

//Read on ERROR_PIPE_BUSY and WaitNamedPipe() for that

return 1; //Error

}

else

{

printf("\nCreateFile() was successful.");

}

//We are done connecting to the server pipe,

//we can start communicating with

//the server using ReadFile()/WriteFile()

//on handle - hPipe

char szBuffer[BUFFER_SIZE];

printf("\nEnter a message to be sent to the server: ");

gets(szBuffer);

DWORD cbBytes;

//Send the message to server

BOOL bResult = WriteFile(

hPipe, // handle to pipe

szBuffer, // buffer to write from

strlen(szBuffer)+1, // number of bytes to write, include the NULL

&cbBytes, // number of bytes written

NULL); // not overlapped I/O

if ( (!bResult) || (strlen(szBuffer)+1 != cbBytes))

{

printf("\nError occurred while writing"

" to the server: %d", GetLastError());

CloseHandle(hPipe);

return 1; //Error

}

else

{

printf("\nWriteFile() was successful.");

}

//Read server response

bResult = ReadFile(

hPipe, // handle to pipe

szBuffer, // buffer to receive data

sizeof(szBuffer), // size of buffer

&cbBytes, // number of bytes read

NULL); // not overlapped I/O

if ( (!bResult) || (0 == cbBytes))

{

printf("\nError occurred while reading"

" from the server: %d", GetLastError());

CloseHandle(hPipe);

return 1; //Error

}

else

{

printf("\nReadFile() was successful.");

}

printf("\nServer sent the following message: %s", szBuffer);

CloseHandle(hPipe);

_getch();

return 0; //Success

}

Соседние файлы в папке курсовая docx525