Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторная работа1 / mainServer
.cpp#include<windows.h>
#include<iostream.h>
#include<string.h>
#include<conio.h>
#define IN_BUFFER_SIZE 1000
#define OUT_BUFFER_SIZE 1000
#define TIME_OUT NMPWAIT_USE_DEFAULT_WAIT//600000
char szOutput[1000]="TEXT OF OUTPUT SERVER";
void ReadThread(LPVOID lpvParam);
void WriteThread(LPVOID lpvParam);
int main(void)
{
char szPipeName[260]="\\\\.\\pipe\\pipeLab6";
HANDLE hPipe;
BOOL fConnected;
DWORD dwReadThreadId,dwWriteThreadId;
HANDLE hReadThread,hWriteThread;
char szAnswer[10]={0};
//-------------------CreateNamedPipe---------------------------------
hPipe=CreateNamedPipe(szPipeName,PIPE_ACCESS_DUPLEX,PIPE_TYPE_MESSAGE|PIPE_READMODE_MESSAGE|PIPE_WAIT,1,OUT_BUFFER_SIZE,IN_BUFFER_SIZE,TIME_OUT,NULL);
if (hPipe == INVALID_HANDLE_VALUE)
{
//FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError(),0,(LPTSTR) lpMsgBuf,0,NULL );
//cout<<lpMsgBuf<<endl;
cout<<"ERROR: CreateNamedPipe have returned INVALID_HANDLE_VALUE"<<endl;
}
else
{
//-------------------ConnectNamedPipe---------------------------------
fConnected=ConnectNamedPipe(hPipe, NULL)?TRUE:(GetLastError() == ERROR_PIPE_CONNECTED);
if(fConnected)
{
//FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError(),0,(LPTSTR) lpMsgBuf,0,NULL );
//cout<<lpMsgBuf<<endl;
cout<<"ERROR: ConnectNamedPipe have returned 0"<<endl;
}
else
{
hReadThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) ReadThread,(LPVOID) hPipe,0,&dwReadThreadId);
if (hReadThread == NULL)
{
//FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError(),0,(LPTSTR) lpMsgBuf,0,NULL );
//cout<<lpMsgBuf<<endl;
cout<<"ERROR: CreateThread have returned NULL"<<endl;
}
hWriteThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) WriteThread,(LPVOID) hPipe,0,&dwWriteThreadId);
if (hWriteThread == NULL)
{
//FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError(),0,(LPTSTR) lpMsgBuf,0,NULL );
//cout<<lpMsgBuf<<endl;
cout<<"ERROR: CreateThread have returned NULL"<<endl;
}
do
{
//system("cls");
cout<<"Write EXIT to exit"<<endl;
cin>>szAnswer;
}
while(strcmp(szAnswer,"EXIT"));
TerminateProcess(hReadThread,1);
TerminateProcess(hWriteThread,1);
DisconnectNamedPipe(hPipe);
}
CloseHandle(hPipe);
}
getch();
}
//*******************************************************************************
void ReadThread(LPVOID lpvParam)
{
HANDLE hPipe;
char Buffer[2]={'a','\0'};
DWORD dwReadSize;
hPipe=(HANDLE)lpvParam;
do
{
ReadFile(hPipe,(LPVOID)Buffer,1,&dwReadSize,NULL);
if(dwReadSize==1)
cout<<"Buffer";
}
while(true);
}
//*******************************************************************************
void WriteThread(LPVOID lpvParam)
{
int i=0;
HANDLE hPipe;
char szMutexName[10]="MutexLab6";
HANDLE hMutex;
DWORD dwWriteSize;
hPipe=(HANDLE)lpvParam;
while(szOutput[i]!='\0')
{
hMutex=CreateMutex(NULL,true,szMutexName);
WriteFile(hPipe,(LPVOID)&szOutput[i],1,&dwWriteSize,NULL);
ReleaseMutex(hMutex);
do
{
hMutex=OpenMutex(MUTEX_ALL_ACCESS,FALSE,szMutexName);
}
while(hMutex==NULL);
WaitForSingleObject(hMutex,INFINITE);
i++;
}
//ExitProcess(1);
}
Соседние файлы в папке Лабораторная работа1